From: Jeffrey Altman Date: Tue, 10 Oct 2006 16:57:44 +0000 (+0000) Subject: DEVEL15-windows-scache-ref-leak-20061010 X-Git-Tag: openafs-devel-1_5_9~20 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=64b9d64aa66e035577a98d2d7b4348708da7bbcd;p=packages%2Fo%2Fopenafs.git DEVEL15-windows-scache-ref-leak-20061010 if cm_FindSCache is called the returned scache object must be released. (cherry picked from commit c60736030bc7f7a678fc44af90d001cd8c08acf5) --- diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index cc5f78556..466e917a1 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -474,6 +474,8 @@ long buf_SetNBuffers(afs_uint64 nbuffers) */ void buf_WaitIO(cm_scache_t * scp, cm_buf_t *bp) { + int release = 0; + if (scp) osi_assert(scp->magic == CM_SCACHE_MAGIC); osi_assert(bp->magic == CM_BUF_MAGIC); @@ -510,7 +512,8 @@ void buf_WaitIO(cm_scache_t * scp, cm_buf_t *bp) } if ( !scp ) { - scp = cm_FindSCache(&bp->fid); + if (scp = cm_FindSCache(&bp->fid)) + release = 1; } if ( scp ) { lock_ObtainMutex(&scp->mx); @@ -530,6 +533,9 @@ void buf_WaitIO(cm_scache_t * scp, cm_buf_t *bp) osi_Wakeup((LONG_PTR) bp); } osi_Log1(buf_logp, "WaitIO finished wait for bp 0x%p", bp); + + if (scp && release) + cm_ReleaseSCache(scp); } /* find a buffer, if any, for a particular file ID and offset. Assumes