From: Jeffrey Altman Date: Wed, 31 Oct 2012 16:04:50 +0000 (-0400) Subject: Windows: cm_ConnByServer increment under lock X-Git-Tag: upstream/1.8.0_pre1^2~1846 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=6580d64b5d8ef0ccce71b72783b33c9e6f75b9e8;p=packages%2Fo%2Fopenafs.git Windows: cm_ConnByServer increment under lock Incrementing the cm_conn.refCount must be performed while holding the cm_connLock in order to prevent cm_GCConnections() from seeing an in-use object as having a zero count. Change-Id: Ifaa755ef0f04f3bf64223434dfc518bc73d01d4d Reviewed-on: http://gerrit.openafs.org/8347 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c index e625db0e5..195c4e127 100644 --- a/src/WINNT/afsd/cm_conn.c +++ b/src/WINNT/afsd/cm_conn.c @@ -1592,6 +1592,7 @@ long cm_ConnByServer(cm_server_t *serverp, cm_user_t *userp, afs_uint32 replicat break; } if (tcp) { + InterlockedIncrement(&tcp->refCount); lock_ReleaseWrite(&cm_connLock); goto haveconn; } @@ -1610,10 +1611,10 @@ long cm_ConnByServer(cm_server_t *serverp, cm_user_t *userp, afs_uint32 replicat lock_ReleaseWrite(&cm_connLock); lock_ReleaseMutex(&userp->mx); } else { + InterlockedIncrement(&tcp->refCount); lock_ReleaseRead(&cm_connLock); haveconn: lock_ReleaseMutex(&userp->mx); - InterlockedIncrement(&tcp->refCount); lock_ObtainMutex(&tcp->mx); if ((tcp->flags & CM_CONN_FLAG_FORCE_NEW) ||