FileName));
}
+ //
+ // This reference count is either stored into the return DirectoryCB
+ // or released before function exit.
+ //
+
lCount = AFSObjectInfoIncrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_DIRENTRY);
AFSObjectInfoCB *pObjectInfo = NULL;
LONG lCount;
+ ullIndex = AFSCreateLowIndex( FileId);
+
+ AFSAcquireShared( VolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
+
if ( AFSIsEqualFID( &VolumeCB->ObjectInformation.FileId, FileId))
{
else
{
- AFSAcquireExcl( VolumeCB->ObjectInfoTree.TreeLock,
- TRUE);
-
- ullIndex = AFSCreateLowIndex( FileId);
-
ntStatus = AFSLocateHashEntry( VolumeCB->ObjectInfoTree.TreeHead,
ullIndex,
(AFSBTreeEntry **)&pObjectInfo);
-
- AFSReleaseResource( VolumeCB->ObjectInfoTree.TreeLock);
}
if ( NT_SUCCESS( ntStatus)) {
lCount));
}
+ AFSReleaseResource( VolumeCB->ObjectInfoTree.TreeLock);
+
return pObjectInfo;
}
ASSERT( *ppObjectInfo == NULL);
- ASSERT( pObjectInfo->ObjectReferenceCount == 0);
-
- bHeldInService = BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_HELD_IN_SERVICE);
-
if( !ExIsResourceAcquiredExclusiveLite( pObjectInfo->VolumeCB->ObjectInfoTree.TreeLock))
{
bAcquiredTreeLock = TRUE;
}
+ ASSERT( pObjectInfo->ObjectReferenceCount == 0);
+
+ bHeldInService = BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_HELD_IN_SERVICE);
+
if ( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
{
FileId = pObjectInfo->FileId;
}
+ ASSERT( pObjectInfo->ObjectReferenceCount == 0);
+
ExDeleteResourceLite( &pObjectInfo->NonPagedInfo->ObjectInfoLock);
ExDeleteResourceLite( &pObjectInfo->NonPagedInfo->DirectoryNodeHdrLock);