From: Jeffrey Altman Date: Wed, 4 Oct 2006 01:20:09 +0000 (+0000) Subject: DEVEL15-windows-fetchstatus-20061003 X-Git-Tag: openafs-devel-1_5_9~46 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=99a9bf2e27833f788c9ac09df17eb1070d197bf5;p=packages%2Fo%2Fopenafs.git DEVEL15-windows-fetchstatus-20061003 Don't call cm_GetCallback without checking the current callback status with cm_HaveCallback first (cherry picked from commit 665a125335c4844d35fa6510a38083602ef7fdbc) --- diff --git a/src/WINNT/afsd/cm_access.c b/src/WINNT/afsd/cm_access.c index 5e8a7c055..d9bdceb88 100644 --- a/src/WINNT/afsd/cm_access.c +++ b/src/WINNT/afsd/cm_access.c @@ -123,7 +123,7 @@ long cm_GetAccessRights(struct cm_scache *scp, struct cm_user *userp, /* pretty easy: just force a pass through the fetch status code */ - osi_Log2(afsd_logp, "GetAccess scp %x user %x", scp, userp); + osi_Log2(afsd_logp, "GetAccess scp 0x%p user 0x%p", scp, userp); /* first, start by finding out whether we have a directory or something * else, so we can find what object's ACL we need. @@ -151,14 +151,16 @@ long cm_GetAccessRights(struct cm_scache *scp, struct cm_user *userp, } osi_Log2(afsd_logp, "GetAccess parent scp %x user %x", aclScp, userp); - lock_ObtainMutex(&aclScp->mx); - code = cm_SyncOp(aclScp, NULL, userp, reqp, 0, - CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); - if (!code) { - code = cm_GetCallback(aclScp, userp, reqp, 1); - cm_SyncOpDone(aclScp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); + if (!cm_HaveCallback(aclScp)) { + lock_ObtainMutex(&aclScp->mx); + code = cm_SyncOp(aclScp, NULL, userp, reqp, 0, + CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); + if (!code) { + code = cm_GetCallback(aclScp, userp, reqp, 1); + cm_SyncOpDone(aclScp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); + } + lock_ReleaseMutex(&aclScp->mx); } - lock_ReleaseMutex(&aclScp->mx); cm_ReleaseSCache(aclScp); lock_ObtainMutex(&scp->mx); } else if (!got_cb) {