mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-03 12:23:25 +00:00
Synchronize with paging I/O.
svn path=/trunk/; revision=42724
This commit is contained in:
@@ -115,6 +115,7 @@ BOOLEAN FirstAttempt )
|
||||
PtrExt2VCB PtrVCB = NULL;
|
||||
PtrExt2NTRequiredFCB PtrReqdFCB = NULL;
|
||||
PERESOURCE PtrResourceAcquired = NULL;
|
||||
PERESOURCE PtrPagingIoResourceAcquired = NULL;
|
||||
|
||||
BOOLEAN CompleteIrp = TRUE;
|
||||
BOOLEAN PostRequest = FALSE;
|
||||
@@ -180,10 +181,11 @@ BOOLEAN FirstAttempt )
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_FILE_OBJ, "###### File Pointer 0x%LX [Close]", PtrFileObject);
|
||||
}
|
||||
|
||||
i = 1;
|
||||
while( !AcquiredVCB )
|
||||
{
|
||||
DebugTraceState( "VCB AC:0x%LX SW:0x%LX EX:0x%LX [Close]", PtrVCB->VCBResource.ActiveCount, PtrVCB->VCBResource.NumberOfExclusiveWaiters, PtrVCB->VCBResource.NumberOfSharedWaiters );
|
||||
DebugTraceState( "VCB AC:0x%LX EX:0x%LX SW:0x%LX [Close]", PtrVCB->VCBResource.ActiveCount, PtrVCB->VCBResource.NumberOfExclusiveWaiters, PtrVCB->VCBResource.NumberOfSharedWaiters );
|
||||
if(! ExAcquireResourceExclusiveLite( &(PtrVCB->VCBResource), FALSE ) )
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** VCB Acquisition FAILED [Close]", 0);
|
||||
@@ -231,13 +233,14 @@ BOOLEAN FirstAttempt )
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_FILE_OBJ, "###### File Pointer 0x%LX [Close]", PtrFileObject);
|
||||
}
|
||||
|
||||
PtrReqdFCB = &PtrFCB->NTRequiredFCB;
|
||||
|
||||
i = 1;
|
||||
while( !PtrResourceAcquired )
|
||||
{
|
||||
PtrReqdFCB = &(PtrFCB->NTRequiredFCB);
|
||||
|
||||
DebugTraceState( "FCBMain AC:0x%LX SW:0x%LX EX:0x%LX [Close]", PtrReqdFCB->MainResource.ActiveCount, PtrReqdFCB->MainResource.NumberOfExclusiveWaiters, PtrReqdFCB->MainResource.NumberOfSharedWaiters );
|
||||
if(! ExAcquireResourceExclusiveLite( &(PtrFCB->NTRequiredFCB.MainResource ), FALSE ) )
|
||||
DebugTraceState( "FCBMain AC:0x%LX EX:0x%LX SW:0x%LX [Close]", PtrReqdFCB->MainResource.ActiveCount, PtrReqdFCB->MainResource.NumberOfExclusiveWaiters, PtrReqdFCB->MainResource.NumberOfSharedWaiters );
|
||||
if(! ExAcquireResourceExclusiveLite( &(PtrReqdFCB->MainResource), FALSE ) )
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** FCB Acquisition FAILED [Close]", 0);
|
||||
if( BlockForResource && i != 1000 )
|
||||
@@ -261,7 +264,40 @@ BOOLEAN FirstAttempt )
|
||||
else
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** FCB acquired [Close]", 0);
|
||||
PtrResourceAcquired = & ( PtrFCB->NTRequiredFCB.MainResource );
|
||||
PtrResourceAcquired = & ( PtrReqdFCB->MainResource );
|
||||
}
|
||||
i *= 10;
|
||||
}
|
||||
|
||||
i = 1;
|
||||
while( !PtrPagingIoResourceAcquired )
|
||||
{
|
||||
DebugTraceState( "FCBPaging AC:0x%LX EX:0x%LX SW:0x%LX [Close]", PtrReqdFCB->PagingIoResource.ActiveCount, PtrReqdFCB->PagingIoResource.NumberOfExclusiveWaiters, PtrReqdFCB->PagingIoResource.NumberOfSharedWaiters );
|
||||
if(! ExAcquireResourceExclusiveLite( &(PtrReqdFCB->PagingIoResource), FALSE ) )
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** FCB Acquisition FAILED [Close]", 0);
|
||||
if( BlockForResource && i != 1000 )
|
||||
{
|
||||
LARGE_INTEGER Delay;
|
||||
|
||||
// KeSetPriorityThread( PsGetCurrentThread(), LOW_REALTIME_PRIORITY );
|
||||
|
||||
Delay.QuadPart = -500 * i;
|
||||
KeDelayExecutionThread( KernelMode, FALSE, &Delay );
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** Retrying... after 50 * %ld ms [Close]", i);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( i == 1000 )
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** Reposting... [Close]", 0 );
|
||||
PostRequest = TRUE;
|
||||
try_return( RC = STATUS_PENDING );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** FCB acquired [Close]", 0);
|
||||
PtrPagingIoResourceAcquired = & ( PtrReqdFCB->PagingIoResource );
|
||||
}
|
||||
i *= 10;
|
||||
}
|
||||
@@ -372,11 +408,22 @@ BOOLEAN FirstAttempt )
|
||||
DebugTrace(DEBUG_TRACE_MISC, "^^^^^Deleting FCB [Close]", 0);
|
||||
RemoveEntryList( &PtrFCB->NextFCB );
|
||||
|
||||
if ( PtrPagingIoResourceAcquired )
|
||||
{
|
||||
Ext2ReleaseResource(PtrPagingIoResourceAcquired);
|
||||
DebugTraceState( "Resource AC:0x%LX EX:0x%LX SW:0x%LX [Close]",
|
||||
PtrPagingIoResourceAcquired->ActiveCount,
|
||||
PtrPagingIoResourceAcquired->NumberOfExclusiveWaiters,
|
||||
PtrPagingIoResourceAcquired->NumberOfSharedWaiters );
|
||||
|
||||
PtrPagingIoResourceAcquired = NULL;
|
||||
}
|
||||
|
||||
if ( PtrResourceAcquired )
|
||||
{
|
||||
Ext2ReleaseResource(PtrResourceAcquired);
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** FCB Released [Close]", 0);
|
||||
DebugTraceState( "Resource AC:0x%LX SW:0x%LX EX:0x%LX [Close]",
|
||||
DebugTraceState( "Resource AC:0x%LX EX:0x%LX SW:0x%LX [Close]",
|
||||
PtrResourceAcquired->ActiveCount,
|
||||
PtrResourceAcquired->NumberOfExclusiveWaiters,
|
||||
PtrResourceAcquired->NumberOfSharedWaiters );
|
||||
@@ -385,8 +432,9 @@ BOOLEAN FirstAttempt )
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_FILE_OBJ, "###### File Pointer 0x%LX [Close]", PtrFileObject);
|
||||
}
|
||||
PtrResourceAcquired = FALSE;
|
||||
PtrResourceAcquired = NULL;
|
||||
}
|
||||
|
||||
Ext2ReleaseFCB( PtrFCB );
|
||||
}
|
||||
|
||||
@@ -407,11 +455,22 @@ BOOLEAN FirstAttempt )
|
||||
}
|
||||
finally
|
||||
{
|
||||
if ( PtrPagingIoResourceAcquired )
|
||||
{
|
||||
Ext2ReleaseResource(PtrPagingIoResourceAcquired);
|
||||
DebugTraceState( "Resource AC:0x%LX EX:0x%LX SW:0x%LX [Close]",
|
||||
PtrPagingIoResourceAcquired->ActiveCount,
|
||||
PtrPagingIoResourceAcquired->NumberOfExclusiveWaiters,
|
||||
PtrPagingIoResourceAcquired->NumberOfSharedWaiters );
|
||||
|
||||
PtrPagingIoResourceAcquired = NULL;
|
||||
}
|
||||
|
||||
if ( PtrResourceAcquired )
|
||||
{
|
||||
Ext2ReleaseResource(PtrResourceAcquired);
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** FCB Released [Close]", 0);
|
||||
DebugTraceState( "Resource AC:0x%LX SW:0x%LX EX:0x%LX [Close]",
|
||||
DebugTraceState( "Resource AC:0x%LX EX:0x%LX SW:0x%LX [Close]",
|
||||
PtrResourceAcquired->ActiveCount,
|
||||
PtrResourceAcquired->NumberOfExclusiveWaiters,
|
||||
PtrResourceAcquired->NumberOfSharedWaiters );
|
||||
@@ -420,14 +479,14 @@ BOOLEAN FirstAttempt )
|
||||
{
|
||||
DebugTrace(DEBUG_TRACE_FILE_OBJ, "###### File Pointer 0x%LX [Close]", PtrFileObject);
|
||||
}
|
||||
PtrResourceAcquired = FALSE;
|
||||
PtrResourceAcquired = NULL;
|
||||
}
|
||||
|
||||
if (AcquiredVCB)
|
||||
{
|
||||
ASSERT(PtrVCB);
|
||||
Ext2ReleaseResource(&(PtrVCB->VCBResource));
|
||||
DebugTraceState( "VCB AC:0x%LX SW:0x%LX EX:0x%LX [Close]", PtrVCB->VCBResource.ActiveCount, PtrVCB->VCBResource.NumberOfExclusiveWaiters, PtrVCB->VCBResource.NumberOfSharedWaiters );
|
||||
DebugTraceState( "VCB AC:0x%LX EX:0x%LX SW:0x%LX [Close]", PtrVCB->VCBResource.ActiveCount, PtrVCB->VCBResource.NumberOfExclusiveWaiters, PtrVCB->VCBResource.NumberOfSharedWaiters );
|
||||
DebugTrace(DEBUG_TRACE_MISC, "*** VCB Released [Close]", 0);
|
||||
|
||||
AcquiredVCB = FALSE;
|
||||
|
||||
Reference in New Issue
Block a user