Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 392584f2a30c0055e53f5509bc3c2af2c9ac7c8c https://github.com/WebKit/WebKit/commit/392584f2a30c0055e53f5509bc3c2af2c9ac7c8c Author: Ben Nham <n...@apple.com> Date: 2023-07-19 (Wed, 19 Jul 2023)
Changed paths: M Source/WebKit/NetworkProcess/storage/CacheStorageCache.cpp M Source/WebKit/NetworkProcess/storage/CacheStorageCache.h Log Message: ----------- Multiple in-flight CacheStorage.open calls create duplicate responses in CacheStorageCache https://bugs.webkit.org/show_bug.cgi?id=259348 rdar://112483324 Reviewed by Chris Dumez. We've seen webpages that call `CacheStorage.open` with the same cache name hundreds of times in quick succession. This triggers a bug in `CacheStorageCache::open`. Each call to `CacheStorage::open` will enqueue a block that essentially reads the entire contents of a directory into memory (via `readAllRecordInfos`) until m_isInitialized is set. We then take the contents of that directory and parse it into the `m_records` hash map, once for each time that block executes. The end result is that `m_records` contains duplicate cached responses (one set of duplicate responses each time `readAllRecordInfos` executes), which then makes all subsequent DOMCache use much more memory than necessary. To fix this, only execute the block in `CacheStorageCache::open` once. Subsequent calls to `CacheStorageCache::open` now just append to a list of pending callbacks. * Source/WebKit/NetworkProcess/storage/CacheStorageCache.cpp: (WebKit::CacheStorageCache::~CacheStorageCache): (WebKit::CacheStorageCache::open): * Source/WebKit/NetworkProcess/storage/CacheStorageCache.h: Canonical link: https://commits.webkit.org/266174@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes