Windows: ObjectInformation.ObjectReferenceCount comparison
authorJeffrey Altman <jaltman@your-file-system.com>
Tue, 27 Mar 2012 04:16:30 +0000 (00:16 -0400)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 28 Mar 2012 04:09:49 +0000 (21:09 -0700)
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 <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>

src/WINNT/afsrdr/kernel/lib/AFSClose.cpp
src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp
src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp

index e1a37bf..469ba51 100644 (file)
@@ -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))
index bf13d2d..40da6ee 100644 (file)
@@ -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);
         }
index 168d060..ac83818 100644 (file)
@@ -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))
                         {