BooleanFlagOn( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE))
{
+ //
+ // Release the Fcb Resource while processing the pending delete
+ // to avoid an out of order lock acquisition
+ //
+
+ ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
+
+ AFSReleaseResource( &pFcb->NPFcb->Resource);
+
ntStatus = STATUS_SUCCESS;
ulNotificationFlags |= AFS_REQUEST_FLAG_FILE_DELETED;
ntStatus));
ntStatus = STATUS_SUCCESS;
-
- ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
}
else
{
SetFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_DELETED);
- ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
-
ASSERT( pParentObjectInfo != NULL);
if ( pParentObjectInfo != NULL)
}
}
}
+
+ //
+ // Regain exclusive access to the Fcb
+ //
+
+ AFSAcquireExcl( &pFcb->NPFcb->Resource,
+ TRUE);
}
else
{
BooleanFlagOn( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE))
{
+ //
+ // Release the Fcb Resource while processing the pending delete
+ // to avoid an out of order lock acquisition
+ //
+
+ ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
+
+ AFSReleaseResource( &pFcb->NPFcb->Resource);
+
//
// Try to notify the service about the delete
//
ntStatus));
ntStatus = STATUS_SUCCESS;
-
- ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
}
else
{
SetFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_DELETED);
- ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
-
ASSERT( pParentObjectInfo != NULL);
if ( pParentObjectInfo != NULL)
}
}
}
+
+ //
+ // Regain exclusive access to the Fcb
+ //
+
+ AFSAcquireExcl( &pFcb->NPFcb->Resource,
+ TRUE);
}
//
BooleanFlagOn( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE))
{
+ //
+ // Release the Fcb Resource while processing the pending delete
+ // to avoid an out of order lock acquisition
+ //
+
+ ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
+
+ AFSReleaseResource( &pFcb->NPFcb->Resource);
+
//
// Try to notify the service about the delete
//
ntStatus));
ntStatus = STATUS_SUCCESS;
-
- ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
}
else
{
SetFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_DELETED);
- ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
-
ASSERT( pParentObjectInfo != NULL);
if ( pParentObjectInfo != NULL)
}
}
}
- }
+
+ //
+ // Regain exclusive access to the Fcb
+ //
+
+ AFSAcquireExcl( &pFcb->NPFcb->Resource,
+ TRUE);
+ }
//
// If there have been any updates to the node then push it to