if( pDirNode == NULL)
{
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeGlobalDirectoryEntries Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING | AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_ERROR,
ExFreePool( pDirNode);
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeGlobalDirectoryEntries Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
AFS_TRACE_LEVEL_ERROR,
"AFSInitializeGlobalDirectoryEntries AFS_DIR_ENTRY_TAG allocation failure\n"));
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeGlobalDirectoryEntries Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
ExFreePool( pDirNode);
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeGlobalDirectoryEntries Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
if( AFSGlobalDotDirEntry != NULL)
{
- AFSDeleteObjectInfo( &AFSGlobalDotDirEntry->ObjectInformation);
+ lCount = AFSObjectInfoDecrement( AFSGlobalDotDirEntry->ObjectInformation,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeGlobalDirectoryEntries Decrement count on object %p Cnt %d\n",
+ AFSGlobalDotDirEntry->ObjectInformation,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &AFSGlobalDotDirEntry->ObjectInformation);
+ }
ExDeleteResourceLite( &AFSGlobalDotDirEntry->NonPaged->Lock);
if( AFSGlobalDotDotDirEntry != NULL)
{
- AFSDeleteObjectInfo( &AFSGlobalDotDotDirEntry->ObjectInformation);
+ lCount = AFSObjectInfoDecrement( AFSGlobalDotDotDirEntry->ObjectInformation,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeGlobalDirectoryEntries Decrement count on object %p Cnt %d\n",
+ AFSGlobalDotDotDirEntry->ObjectInformation,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &AFSGlobalDotDotDirEntry->ObjectInformation);
+ }
ExDeleteResourceLite( &AFSGlobalDotDotDirEntry->NonPaged->Lock);
FileName));
}
+ //
+ // This reference count is either stored into the return DirectoryCB
+ // or released before function exit.
+ //
+
lCount = AFSObjectInfoIncrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_DIRENTRY);
pObjectInfoCB,
lCount));
- if( bAllocatedObjectCB)
+ if( bAllocatedObjectCB &&
+ lCount == 0)
{
- ASSERT( pObjectInfoCB->ObjectReferenceCount == 0);
-
AFSDeleteObjectInfo( &pObjectInfoCB);
}
}
if( pDirNode == NULL)
{
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeSpecialShareNameList Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
ExFreePool( pDirNode);
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeSpecialShareNameList Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
if( pDirNode == NULL)
{
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeSpecialShareNameList Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
ExFreePool( pDirNode);
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeSpecialShareNameList Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
pLastDirNode = (AFSDirectoryCB *)pDirNode->ListEntry.fLink;
- AFSDeleteObjectInfo( &pDirNode->ObjectInformation);
+ lCount = AFSObjectInfoDecrement( pDirNode->ObjectInformation,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeSpecialShareNameList Decrement count on object %p Cnt %d\n",
+ pDirNode->ObjectInformation,
+ lCount));
+
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pDirNode->ObjectInformation);
+ }
ExDeleteResourceLite( &pDirNode->NonPaged->Lock);
pObjectInfoCB,
lCount));
- AFSDeleteObjectInfo( &pObjectInfoCB);
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pObjectInfoCB);
+ }
}
}
}
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);
AFSGlobalDotDirEntry->ObjectInformation,
lCount));
- AFSDeleteObjectInfo( &AFSGlobalDotDirEntry->ObjectInformation);
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &AFSGlobalDotDirEntry->ObjectInformation);
+ }
ExDeleteResourceLite( &AFSGlobalDotDirEntry->NonPaged->Lock);
AFSGlobalDotDotDirEntry->ObjectInformation,
lCount));
- AFSDeleteObjectInfo( &AFSGlobalDotDotDirEntry->ObjectInformation);
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &AFSGlobalDotDotDirEntry->ObjectInformation);
+ }
ExDeleteResourceLite( &AFSGlobalDotDotDirEntry->NonPaged->Lock);
pDirNode->ObjectInformation,
lCount));
- AFSDeleteObjectInfo( &pDirNode->ObjectInformation);
+ if ( lCount == 0)
+ {
+
+ AFSDeleteObjectInfo( &pDirNode->ObjectInformation);
+ }
ExDeleteResourceLite( &pDirNode->NonPaged->Lock);