From 2b798792fb56c5feda8e68dd433c82f43b1698aa Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 31 Oct 2012 09:50:34 -0400 Subject: [PATCH] Windows: Interlocked ops for cell and scache allocation Replace foo++ with InterlockedIncrement for cm_data cell and scache counters which are used for allocating objects. Change-Id: I09d2a536ef559d6d5873a3fdead4c8580bc93a0c Reviewed-on: http://gerrit.openafs.org/8344 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsd/cm_cell.c | 2 +- src/WINNT/afsd/cm_scache.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/WINNT/afsd/cm_cell.c b/src/WINNT/afsd/cm_cell.c index 7fb120cd7..f9c3ed4c7 100644 --- a/src/WINNT/afsd/cm_cell.c +++ b/src/WINNT/afsd/cm_cell.c @@ -272,7 +272,7 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, afs_uint32 flags) /* don't increment currentCells until we know that we * are going to keep this entry */ - cp = &cm_data.cellBaseAddress[cm_data.currentCells]; + cp = &cm_data.cellBaseAddress[InterlockedIncrement(&cm_data.currentCells) - 1]; memset(cp, 0, sizeof(cm_cell_t)); cp->magic = CM_CELL_MAGIC; diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index dbfe277fe..44e61472d 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -390,7 +390,7 @@ cm_GetNewSCache(afs_uint32 locked) /* if we get here, we should allocate a new scache entry. We either are below * quota or we have a leak and need to allocate a new one to avoid panicing. */ - scp = cm_data.scacheBaseAddress + cm_data.currentSCaches; + scp = cm_data.scacheBaseAddress + InterlockedIncrement(&cm_data.currentSCaches) - 1; osi_assertx(scp >= cm_data.scacheBaseAddress && scp < (cm_scache_t *)cm_data.scacheHashTablep, "invalid cm_scache_t address"); memset(scp, 0, sizeof(cm_scache_t)); @@ -409,7 +409,6 @@ cm_GetNewSCache(afs_uint32 locked) /* and put it in the LRU queue */ osi_QAddH((osi_queue_t **) &cm_data.scacheLRUFirstp, (osi_queue_t **)&cm_data.scacheLRULastp, &scp->q); - cm_data.currentSCaches++; cm_dnlcPurgedp(scp); /* make doubly sure that this is not in dnlc */ cm_dnlcPurgevp(scp); scp->allNextp = cm_data.allSCachesp; -- 2.39.5