try_return( ntStatus);
}
- AFSAcquireShared( pVolumeCB->ObjectInfoTree.TreeLock,
+ AFSAcquireExcl( pVolumeCB->ObjectInfoTree.TreeLock,
TRUE);
if ( AFSIsVolumeFID( &InvalidateCB->FileID))
}
}
+ AFSAcquireShared( VolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
+
//
// Invalidate the volume root directory
//
pCurrentObject,
lCount));
+ AFSReleaseResource( VolumeCB->ObjectInfoTree.TreeLock);
+
AFSInvalidateObject( &pCurrentObject,
Reason);
+ AFSAcquireShared( VolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
+
if ( pCurrentObject)
{
// Apply invalidation to all other volume objects
//
- AFSAcquireShared( VolumeCB->ObjectInfoTree.TreeLock,
- TRUE);
-
pCurrentObject = VolumeCB->ObjectInfoListHead;
if ( pCurrentObject)
SetFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID);
+ AFSAcquireShared( ParentObjectInfo->VolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
+
lCount = AFSObjectInfoIncrement( ParentObjectInfo,
AFS_OBJECT_REFERENCE_CHILD);
"AFSAllocateObjectInfo Increment count on parent object %p Cnt %d\n",
ParentObjectInfo,
lCount));
+
+ AFSReleaseResource( ParentObjectInfo->VolumeCB->ObjectInfoTree.TreeLock);
}
//
ClearFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID);
+ AFSAcquireShared( pParentObjectInfo->VolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
+
lCount = AFSObjectInfoDecrement( pParentObjectInfo,
AFS_OBJECT_REFERENCE_CHILD);
pParentObjectInfo,
lCount));
+ AFSReleaseResource( pParentObjectInfo->VolumeCB->ObjectInfoTree.TreeLock);
+
AFSReleaseObjectInfo( &pParentObjectInfo);
}
}
pObjectInfo = &pVolumeCB->ObjectInformation;
+ AFSAcquireShared( pVolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
+
lCount = AFSObjectInfoIncrement( pObjectInfo,
AFS_OBJECT_REFERENCE_STATUS);
"AFSGetObjectStatus Increment1 count on object %p Cnt %d\n",
pObjectInfo,
lCount));
+
+ AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock);
}
else
{
- AFSAcquireShared( pVolumeCB->ObjectInfoTree.TreeLock,
- TRUE);
+ AFSAcquireExcl( pVolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
ullIndex = AFSCreateLowIndex( &GetStatusInfo->FileID);
pObjectInfo = pDirectoryEntry->ObjectInformation;
+ AFSAcquireExcl( pObjectInfo->VolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
+
lCount = AFSObjectInfoIncrement( pObjectInfo,
AFS_OBJECT_REFERENCE_STATUS);
"AFSGetObjectStatus Increment3 count on object %p Cnt %d\n",
pObjectInfo,
lCount));
+
+ AFSReleaseResource( pObjectInfo->VolumeCB->ObjectInfoTree.TreeLock);
}
//
ASSERT( lCount >= 0);
}
- if( pObjectInfo != NULL)
+ if( pVolumeCB != NULL)
{
- lCount = AFSObjectInfoDecrement( pObjectInfo,
- AFS_OBJECT_REFERENCE_STATUS);
+ if( pObjectInfo != NULL)
+ {
- AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Decrement count on object %p Cnt %d\n",
- pObjectInfo,
- lCount));
- }
+ AFSAcquireShared( pVolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
- if( pVolumeCB != NULL)
- {
+ lCount = AFSObjectInfoDecrement( pObjectInfo,
+ AFS_OBJECT_REFERENCE_STATUS);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus Decrement count on object %p Cnt %d\n",
+ pObjectInfo,
+ lCount));
+
+ AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock);
+ }
lCount = AFSVolumeDecrement( pVolumeCB,
VolumeReferenceReason);