WebKit Bugzilla
Attachment 370877 Details for
Bug 198346
: IndexedDatabase Server thread in com.apple.WebKit.Networking process leaks objects into an autoreleasePool that's never cleared
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch v1
bug-198346-20190529131242.patch (text/plain), 6.02 KB, created by
David Kilzer (:ddkilzer)
on 2019-05-29 13:12:44 PDT
(
hide
)
Description:
Patch v1
Filename:
MIME Type:
Creator:
David Kilzer (:ddkilzer)
Created:
2019-05-29 13:12:44 PDT
Size:
6.02 KB
patch
obsolete
>Subversion Revision: 245854 >diff --git a/Source/WTF/ChangeLog b/Source/WTF/ChangeLog >index a861f189a51e497c62f565b76fe26e02bb805eed..a449a9ba21be67bd2e6ed03d328ac4761d79c2ca 100644 >--- a/Source/WTF/ChangeLog >+++ b/Source/WTF/ChangeLog >@@ -1,3 +1,26 @@ >+2019-05-29 David Kilzer <ddkilzer@apple.com> >+ >+ IndexedDatabase Server thread in com.apple.WebKit.Networking process leaks objects into an autoreleasePool that's never cleared >+ <https://webkit.org/b/198346> >+ <rdar://problem/50895658> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * wtf/CrossThreadTaskHandler.cpp: >+ (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler): >+ - Add optional second argument to enable use of an >+ AutodrainedPool when running the runloop. >+ (WTF::CrossThreadTaskHandler::taskRunLoop): >+ - Create an AutodrainedPool if requested when >+ CrossThreadTaskHandler was created. >+ * wtf/CrossThreadTaskHandler.h: >+ (WTF::CrossThreadTaskHandler::AutodrainedPoolForRunLoop): >+ - Add enum class for enabling an AutodrainedPool for >+ CrossThreadTaskHandler::taskRunLoop(). >+ (WTF::CrossThreadTaskHandler::CrossThreadTaskHandler): >+ - Add optional second argument to enable use of an >+ AutodrainedPool when running the runloop. >+ > 2019-05-27 Chris Dumez <cdumez@apple.com> > > Use a strongly-typed identifier for pages >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index caaa8d76b8dcc9a5321a2c4f8dcd640116dc5220..492aba54b69951bdaa7e681a1d92cb365c9cfc24 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,16 @@ >+2019-05-29 David Kilzer <ddkilzer@apple.com> >+ >+ IndexedDatabase Server thread in com.apple.WebKit.Networking process leaks objects into an autoreleasePool that's never cleared >+ <https://webkit.org/b/198346> >+ <rdar://problem/50895658> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Modules/indexeddb/server/IDBServer.cpp: >+ (WebCore::IDBServer::IDBServer::IDBServer): >+ - Pass AutodrainedPoolForRunLoop::Use when creating >+ CrossThreadTaskHandler to fix the bug. >+ > 2019-05-29 Antti Koivisto <antti@apple.com> > > Scrolling node ordering wrong when a layer has both positioning and fixed/sticky node >diff --git a/Source/WTF/wtf/CrossThreadTaskHandler.cpp b/Source/WTF/wtf/CrossThreadTaskHandler.cpp >index 45ec041779cf82f673bb2f8977a62d9ae33b01ce..83c20751f85f4e4d201561441ca83141cb5c37ff 100644 >--- a/Source/WTF/wtf/CrossThreadTaskHandler.cpp >+++ b/Source/WTF/wtf/CrossThreadTaskHandler.cpp >@@ -26,9 +26,12 @@ > #include "config.h" > #include <wtf/CrossThreadTaskHandler.h> > >+#include <wtf/AutodrainedPool.h> >+ > namespace WTF { > >-CrossThreadTaskHandler::CrossThreadTaskHandler(const char* threadName) >+CrossThreadTaskHandler::CrossThreadTaskHandler(const char* threadName, AutodrainedPoolForRunLoop useAutodrainedPool) >+ : m_useAutodrainedPool(useAutodrainedPool) > { > ASSERT(isMainThread()); > Locker<Lock> locker(m_taskThreadCreationLock); >@@ -69,7 +72,11 @@ void CrossThreadTaskHandler::taskRunLoop() > } > > while (!m_taskQueue.isKilled()) { >- m_taskQueue.waitForMessage().performTask(); >+ { >+ std::unique_ptr<AutodrainedPool> autodrainedPool = (m_useAutodrainedPool == AutodrainedPoolForRunLoop::Use) ? std::make_unique<AutodrainedPool>() : nullptr; >+ >+ m_taskQueue.waitForMessage().performTask(); >+ } > > Locker<Lock> shouldSuspendLocker(m_shouldSuspendLock); > while (m_shouldSuspend) { >diff --git a/Source/WTF/wtf/CrossThreadTaskHandler.h b/Source/WTF/wtf/CrossThreadTaskHandler.h >index f054601c24661e429cf8b98db890ebb5d9233792..1460ae7e8c9e18df5e5b9c5637c3852752db5d20 100644 >--- a/Source/WTF/wtf/CrossThreadTaskHandler.h >+++ b/Source/WTF/wtf/CrossThreadTaskHandler.h >@@ -38,9 +38,10 @@ class SQLiteDatabase; > class CrossThreadTaskHandler { > public: > WTF_EXPORT_PRIVATE virtual ~CrossThreadTaskHandler(); >+ enum class AutodrainedPoolForRunLoop { DoNotUse, Use }; > > protected: >- WTF_EXPORT_PRIVATE CrossThreadTaskHandler(const char* threadName); >+ WTF_EXPORT_PRIVATE CrossThreadTaskHandler(const char* threadName, AutodrainedPoolForRunLoop = AutodrainedPoolForRunLoop::DoNotUse); > > WTF_EXPORT_PRIVATE void postTask(CrossThreadTask&&); > WTF_EXPORT_PRIVATE void postTaskReply(CrossThreadTask&&); >@@ -51,6 +52,8 @@ private: > void handleTaskRepliesOnMainThread(); > void taskRunLoop(); > >+ AutodrainedPoolForRunLoop m_useAutodrainedPool { AutodrainedPoolForRunLoop::DoNotUse }; >+ > Lock m_taskThreadCreationLock; > Lock m_mainThreadReplyLock; > bool m_mainThreadReplyScheduled { false }; >diff --git a/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp b/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp >index 054b7e2fad8fb171d8372007db9da16d7c875621..7f0709d39fcbd8a47f241e9cdb90483a2e760aae 100644 >--- a/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp >+++ b/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp >@@ -57,7 +57,7 @@ Ref<IDBServer> IDBServer::create(PAL::SessionID sessionID, const String& databas > } > > IDBServer::IDBServer(PAL::SessionID sessionID, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter) >- : CrossThreadTaskHandler("IndexedDatabase Server") >+ : CrossThreadTaskHandler("IndexedDatabase Server", AutodrainedPoolForRunLoop::Use) > , m_sessionID(sessionID) > , m_backingStoreTemporaryFileHandler(fileHandler) > , m_quotaManagerGetter(WTFMove(quotaManagerGetter)) >@@ -65,7 +65,7 @@ IDBServer::IDBServer(PAL::SessionID sessionID, IDBBackingStoreTemporaryFileHandl > } > > IDBServer::IDBServer(PAL::SessionID sessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter) >- : CrossThreadTaskHandler("IndexedDatabase Server") >+ : CrossThreadTaskHandler("IndexedDatabase Server", AutodrainedPoolForRunLoop::Use) > , m_sessionID(sessionID) > , m_databaseDirectoryPath(databaseDirectoryPath) > , m_backingStoreTemporaryFileHandler(fileHandler)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 198346
: 370877