From 2af84c09c722edbd7b7680163cd57cf7a91b491a Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 10 Oct 2006 16:59:41 +0000 Subject: [PATCH] STABLE14-windows-scache-ref-leak-20061010 if cm_FindSCache is called the returned scache object must be released. (cherry picked from commit c60736030bc7f7a678fc44af90d001cd8c08acf5) --- src/WINNT/afsd/cm_buf.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index 82e62e69c..aabd3498f 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -439,6 +439,8 @@ void buf_Release(cm_buf_t *bp) */ 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); @@ -475,7 +477,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); @@ -495,6 +498,9 @@ void buf_WaitIO(cm_scache_t * scp, cm_buf_t *bp) osi_Wakeup((long) bp); } osi_Log1(afsd_logp, "WaitIO finished wait for bp 0x%x", (long) bp); + + if (scp && release) + cm_ReleaseSCache(scp); } /* code to drop reference count while holding buf_globalLock */ -- 2.39.5