From 0bc328b9729cb5bfe3085ac01455fe82c9cef7a4 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 27 Mar 2012 00:16:30 -0400 Subject: [PATCH 1/1] 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 --- src/WINNT/afsrdr/kernel/lib/AFSClose.cpp | 2 +- src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp | 4 ++-- src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) 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)) { -- 1.9.4