- Misc fixes with DPRINTS

[RXCE]
- In RxFinalizeSrvOpen, always dereference the FCB, it's always referenced on SRV_OPEN creation
- Misc fixes with DPRINTS

With that revision and r75419, I'm now able to mount a NFS share, browse it, read a file from it, and unmount it.
We're OK regarding references counting!

CORE-8204
CORE-11327
CORE-13581

svn path=/trunk/; revision=75420
This commit is contained in:
Pierre Schweitzer 2017-07-27 09:37:10 +00:00
parent 4a4f6e5d9f
commit 51e9c7f51a
2 changed files with 13 additions and 3 deletions

View file

@ -5664,6 +5664,11 @@ RxFindOrCreateFcb(
/* If FCB was not found or is not covering full path, prepare for more work */ /* If FCB was not found or is not covering full path, prepare for more work */
if (Fcb == NULL || Fcb->FcbTableEntry.Path.Length != NetRootName->Length) if (Fcb == NULL || Fcb->FcbTableEntry.Path.Length != NetRootName->Length)
{ {
if (Fcb != NULL)
{
DPRINT1("FCB was found and it's not covering the whole path: %wZ - %wZ\n", &Fcb->FcbTableEntry.Path, NetRootName);
}
if (!AcquiredExclusive) if (!AcquiredExclusive)
{ {
RxReleaseFcbTableLock(&NetRoot->FcbTable); RxReleaseFcbTableLock(&NetRoot->FcbTable);
@ -6354,7 +6359,7 @@ RxFspDispatch(
RxContext->LastExecutionThread = PsGetCurrentThread(); RxContext->LastExecutionThread = PsGetCurrentThread();
SetFlag(RxContext->Flags, (RX_CONTEXT_FLAG_IN_FSP | RX_CONTEXT_FLAG_WAIT)); SetFlag(RxContext->Flags, (RX_CONTEXT_FLAG_IN_FSP | RX_CONTEXT_FLAG_WAIT));
DPRINT("Dispatch: MN: %d, Ctxt: %p, IRP: %p, THRD: %lx #%lx", RxContext->MinorFunction, DPRINT("Dispatch: MN: %d, Ctxt: %p, IRP: %p, THRD: %lx #%lx\n", RxContext->MinorFunction,
RxContext, RxContext->CurrentIrp, RxContext->LastExecutionThread, RxContext, RxContext->CurrentIrp, RxContext->LastExecutionThread,
RxContext->SerialNumber); RxContext->SerialNumber);

View file

@ -412,6 +412,8 @@ RxAllocateFcbObject(
FsRtlSetupAdvancedHeader(Fcb, &NonPagedFcb->AdvancedFcbHeaderMutex); FsRtlSetupAdvancedHeader(Fcb, &NonPagedFcb->AdvancedFcbHeaderMutex);
} }
DPRINT("Allocated %p\n", Buffer);
return Buffer; return Buffer;
} }
@ -3158,11 +3160,10 @@ RxFinalizeSrvOpen(
RemoveEntryList(&ThisSrvOpen->SrvOpenQLinks); RemoveEntryList(&ThisSrvOpen->SrvOpenQLinks);
} }
/* If enclosed allocation, mark the memory zone free and dereference FCB */ /* If enclosed allocation, mark the memory zone free */
if (BooleanFlagOn(ThisSrvOpen->Flags, SRVOPEN_FLAG_ENCLOSED_ALLOCATED)) if (BooleanFlagOn(ThisSrvOpen->Flags, SRVOPEN_FLAG_ENCLOSED_ALLOCATED))
{ {
ClearFlag(Fcb->FcbState, FCB_STATE_SRVOPEN_USED); ClearFlag(Fcb->FcbState, FCB_STATE_SRVOPEN_USED);
RxDereferenceNetFcb(Fcb);
} }
/* Otherwise, free the memory */ /* Otherwise, free the memory */
else else
@ -3170,6 +3171,8 @@ RxFinalizeSrvOpen(
RxFreeFcbObject(ThisSrvOpen); RxFreeFcbObject(ThisSrvOpen);
} }
RxDereferenceNetFcb(Fcb);
return TRUE; return TRUE;
} }
@ -4089,6 +4092,8 @@ RxFreeFcbObject(
{ {
PAGED_CODE(); PAGED_CODE();
DPRINT("Freeing %p\n", Object);
/* If that's a FOBX/SRV_OPEN, nothing to do, just free it */ /* If that's a FOBX/SRV_OPEN, nothing to do, just free it */
if (NodeType(Object) == RDBSS_NTC_FOBX || NodeType(Object) == RDBSS_NTC_SRVOPEN) if (NodeType(Object) == RDBSS_NTC_FOBX || NodeType(Object) == RDBSS_NTC_SRVOPEN)
{ {