From: Jeffrey Altman Date: Tue, 27 Mar 2012 04:16:30 +0000 (-0400) Subject: Windows: ObjectInformation.ObjectReferenceCount comparison X-Git-Tag: openafs-stable-1_8_0pre1~2668 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=0bc328b9729cb5bfe3085ac01455fe82c9cef7a4;hp=05a703a320e549efe7f68e27cfa86e391cf5839d Windows: ObjectInformation.ObjectReferenceCount comparison If there is an undercount of the ObjectReferenceCount, consider it the same as if the object count is zero for comparison purposes. Change-Id: Ia4ec2d1194f00cb530e7a50ed9db9c71cc4c5313 Reviewed-on: http://gerrit.openafs.org/6970 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSClose.cpp b/src/WINNT/afsrdr/kernel/lib/AFSClose.cpp index e1a37bf..469ba51 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSClose.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSClose.cpp @@ -394,7 +394,7 @@ AFSClose( IN PDEVICE_OBJECT LibDeviceObject, AFSDeleteDirEntry( pObjectInfo->ParentObjectInformation, pDirCB); - if( pObjectInfo->ObjectReferenceCount == 0) + if( pObjectInfo->ObjectReferenceCount <= 0) { if( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_INSERTED_HASH_TREE)) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp index bf13d2d..40da6ee 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp @@ -1669,7 +1669,7 @@ AFSLocateNameEntry( IN GUID *AuthGroup, AFSDeleteDirEntry( pCurrentObject->ParentObjectInformation, pDirEntry); - if( pCurrentObject->ObjectReferenceCount == 0) + if( pCurrentObject->ObjectReferenceCount <= 0) { if( BooleanFlagOn( pCurrentObject->Flags, AFS_OBJECT_INSERTED_HASH_TREE)) @@ -2458,7 +2458,7 @@ AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo, lCount = InterlockedDecrement( &DirEntry->ObjectInformation->ObjectReferenceCount); - if( lCount == 0) + if( lCount <= 0) { SetFlag( DirEntry->ObjectInformation->Flags, AFS_OBJECT_FLAGS_DELETED); } diff --git a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp index 168d060..ac83818 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp @@ -1093,7 +1093,7 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context) pVolumeCB->VolumeReferenceCount == 1 && ( pVolumeCB->RootFcb == NULL || pVolumeCB->RootFcb->OpenReferenceCount == 0) && - pVolumeCB->ObjectInformation.ObjectReferenceCount == 0) + pVolumeCB->ObjectInformation.ObjectReferenceCount <= 0) { if( pVolumeCB->RootFcb != NULL) @@ -1175,7 +1175,7 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context) // if( BooleanFlagOn( pCurrentObject->Flags, AFS_OBJECT_FLAGS_DELETED) && - pCurrentObject->ObjectReferenceCount == 0 && + pCurrentObject->ObjectReferenceCount <= 0 && ( pCurrentObject->Fcb == NULL || pCurrentObject->Fcb->OpenReferenceCount == 0) && pCurrentObject->Specific.Directory.DirectoryNodeListHead == NULL && @@ -1193,7 +1193,7 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context) FALSE)) { - if ( pCurrentObject->ObjectReferenceCount == 0) + if ( pCurrentObject->ObjectReferenceCount <= 0) { if( pCurrentObject->Fcb != NULL) @@ -1387,7 +1387,7 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context) AFSDeleteDirEntry( pCurrentObject, pCurrentDirEntry); - if( pCurrentChildObject->ObjectReferenceCount == 0) + if( pCurrentChildObject->ObjectReferenceCount <= 0) { if( pCurrentChildObject->Fcb != NULL) @@ -1537,7 +1537,7 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context) { if( BooleanFlagOn( pCurrentObject->Flags, AFS_OBJECT_FLAGS_DELETED) && - pCurrentObject->ObjectReferenceCount == 0 && + pCurrentObject->ObjectReferenceCount <= 0 && ( pCurrentObject->Fcb == NULL || pCurrentObject->Fcb->OpenReferenceCount == 0)) {