From af957c35e940aa80fda4dd42ebf92f7e7ed18f3b Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sun, 28 Jun 2015 14:00:24 -0400 Subject: [PATCH] Windows: cm_ApplyDir calls cm_SyncOpDone too soon cm_ApplyDir() failed to maintain the synchronization state while the GetBuffer() operation proceeded. Change-Id: I616622e9aebbdb20a325826032991e5d5c5d9e24 Reviewed-on: http://gerrit.openafs.org/11918 Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- src/WINNT/afsd/cm_vnodeops.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index f1f691b45..104db3356 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -627,10 +627,10 @@ long cm_ApplyDir(cm_scache_t *scp, cm_DirFuncp_t funcp, void *parmp, lock_ReleaseWrite(&scp->rw); break; } - cm_SyncOpDone(scp, bufferp, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_READ | CM_SCACHESYNC_BUFLOCKED); if (cm_HaveBuffer(scp, bufferp, 1)) { - lock_ReleaseWrite(&scp->rw); + cm_SyncOpDone(scp, bufferp, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_READ | CM_SCACHESYNC_BUFLOCKED); + lock_ReleaseWrite(&scp->rw); break; } @@ -638,7 +638,8 @@ long cm_ApplyDir(cm_scache_t *scp, cm_DirFuncp_t funcp, void *parmp, lock_ReleaseMutex(&bufferp->mx); code = cm_GetBuffer(scp, bufferp, NULL, userp, reqp); - lock_ReleaseWrite(&scp->rw); + cm_SyncOpDone(scp, bufferp, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_READ); + lock_ReleaseWrite(&scp->rw); lock_ObtainMutex(&bufferp->mx); if (code) break; -- 2.39.5