Windows: use lock conversion in cm_EndDirOp
authorJeffrey Altman <jaltman@your-file-system.com>
Mon, 5 Sep 2011 14:11:09 +0000 (10:11 -0400)
committerJeffrey Altman <jaltman@openafs.org>
Tue, 6 Sep 2011 06:08:53 +0000 (23:08 -0700)
Instead of dropping the lock for read and reacquiring for write
use lock_ConvertRToW() which will make the change atomicly if
it is possible or place the thread into the wait list if not.

LICENSE MIT

Change-Id: I5d134f045a0c935fdaaef6edf5bdf37bb0418a98
Reviewed-on: http://gerrit.openafs.org/5360
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>

src/WINNT/afsd/cm_dir.c

index cad2cfe..1c2271b 100644 (file)
@@ -1209,8 +1209,9 @@ cm_EndDirOp(cm_dirOp_t * op)
 
             switch (op->lockType) {
             case CM_DIRLOCK_READ:
-                lock_ReleaseRead(&op->scp->dirlock);
-                /* fall through ... */
+                lock_ConvertRToW(&op->scp->dirlock);
+                op->lockType = CM_DIRLOCK_WRITE;
+                break;
             case CM_DIRLOCK_NONE:
                 lock_ObtainWrite(&op->scp->dirlock);
                 op->lockType = CM_DIRLOCK_WRITE;