]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-windows-scache-ref-leak-20061010
authorJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 10 Oct 2006 16:57:44 +0000 (16:57 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 10 Oct 2006 16:57:44 +0000 (16:57 +0000)
if cm_FindSCache is called the returned scache object
must be released.

(cherry picked from commit c60736030bc7f7a678fc44af90d001cd8c08acf5)

src/WINNT/afsd/cm_buf.c

index cc5f78556320dbf9dd37720210132f3fb85ff2d9..466e917a1c85a7f1276bf0a4a15af496f1d8f954 100644 (file)
@@ -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