]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-windows-check-nt-open-lock-sync-20080224
authorJeffrey Altman <jaltman@secure-endpoints.com>
Sun, 24 Aug 2008 17:27:24 +0000 (17:27 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Sun, 24 Aug 2008 17:27:24 +0000 (17:27 +0000)
LICENSE MIT

Move cm_SyncOpDone(CM_SCACHESYNC_LOCK) from cm_CheckNTOpen to
cm_CheckNTOpenDone.  This is necessary to synchronize lock operations.

(cherry picked from commit cc48a5a3b4d328127ca56c1a5845ec6cac136548)

src/WINNT/afsd/cm_vnodeops.c

index ae730db82de8bd63718fe958b19ef995d9c7e0e9..80737a1ce102e3bfe3aa76247eef69d0df249bef 100644 (file)
@@ -254,7 +254,7 @@ long cm_CheckNTOpen(cm_scache_t *scp, unsigned int desiredAccess,
            (*ldpp) = (cm_lock_data_t *)malloc(sizeof(cm_lock_data_t));
            if (!*ldpp) {
                code = ENOMEM;
-               goto _syncopdone;
+               goto _done;
            }
 
            (*ldpp)->key = key;
@@ -288,9 +288,6 @@ long cm_CheckNTOpen(cm_scache_t *scp, unsigned int desiredAccess,
         goto _done;
     }
 
-  _syncopdone:
-    cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_LOCK);
-
  _done:
     lock_ReleaseWrite(&scp->rw);
 
@@ -302,14 +299,15 @@ extern long cm_CheckNTOpenDone(cm_scache_t *scp, cm_user_t *userp, cm_req_t *req
                               cm_lock_data_t ** ldpp)
 {
     osi_Log2(afsd_logp,"cm_CheckNTOpenDone scp 0x%p ldp 0x%p", scp, *ldpp);
+    lock_ObtainWrite(&scp->rw);
     if (*ldpp) {
-       lock_ObtainWrite(&scp->rw);
        cm_Unlock(scp, (*ldpp)->sLockType, (*ldpp)->LOffset, (*ldpp)->LLength, 
                  (*ldpp)->key, userp, reqp);
-       lock_ReleaseWrite(&scp->rw);
        free(*ldpp);
        *ldpp = NULL;
     }
+    cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_LOCK);
+    lock_ReleaseWrite(&scp->rw);
     return 0;
 }
 /*