From 6580d64b5d8ef0ccce71b72783b33c9e6f75b9e8 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 31 Oct 2012 12:04:50 -0400 Subject: [PATCH] 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 --- src/WINNT/afsd/cm_conn.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c index e625db0..195c4e1 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) || -- 1.9.4