From: Jeffrey Altman Date: Sun, 28 Jun 2015 18:00:24 +0000 (-0400) Subject: Windows: cm_ApplyDir calls cm_SyncOpDone too soon X-Git-Tag: upstream/1.8.0_pre1^2~234 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=af957c35e940aa80fda4dd42ebf92f7e7ed18f3b;p=packages%2Fo%2Fopenafs.git 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 --- 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;