From f9056257c8d846ae2fc511bcffa2c1121acc0392 Mon Sep 17 00:00:00 2001 From: "warren%netscape.com" Date: Wed, 12 Apr 2000 09:48:30 +0000 Subject: [PATCH] Adding code to remove entries from free list when recycled. git-svn-id: svn://10.0.0.236/trunk@65690 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/modules/libjar/nsJAR.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/mozilla/modules/libjar/nsJAR.cpp b/mozilla/modules/libjar/nsJAR.cpp index a708cc590fa..d9357881db0 100644 --- a/mozilla/modules/libjar/nsJAR.cpp +++ b/mozilla/modules/libjar/nsJAR.cpp @@ -1138,8 +1138,22 @@ nsZipReaderCache::GetZip(nsIFile* zipFile, nsIZipReader* *result) nsZipCacheEntry* entry = (nsZipCacheEntry*)mZips.Get(&key); if (entry) { *result = entry->mZip; - entry->mUseCount++; NS_ADDREF(*result); + if (entry->mUseCount++ == 0) { + // remove from free list + nsZipCacheEntry** entryPtr = &mFreeList; + NS_ASSERTION(*entryPtr, "null free list"); + while ((*entryPtr)->mNextOlder != nsnull) { + if ((*entryPtr)->mNextOlder == entry) { + (*entryPtr)->mNextOlder = entry->mNextOlder; + entry->mNextOlder = nsnull; + --mFreeCount; + return NS_OK; + } + entryPtr = &(*entryPtr)->mNextOlder; + } + NS_NOTREACHED("couldn't find entry in free list"); + } return NS_OK; }