Title: [245871] trunk/Source
- Revision
- 245871
- Author
- [email protected]
- Date
- 2019-05-29 15:07:24 -0700 (Wed, 29 May 2019)
Log Message
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 Brent Fulgham.
Source/WebCore:
* Modules/indexeddb/server/IDBServer.cpp:
(WebCore::IDBServer::IDBServer::IDBServer):
- Pass AutodrainedPoolForRunLoop::Use when creating
CrossThreadTaskHandler to fix the bug.
Source/WTF:
* 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.
Modified Paths
Diff
Modified: trunk/Source/WTF/ChangeLog (245870 => 245871)
--- trunk/Source/WTF/ChangeLog 2019-05-29 22:04:58 UTC (rev 245870)
+++ trunk/Source/WTF/ChangeLog 2019-05-29 22:07:24 UTC (rev 245871)
@@ -1,3 +1,26 @@
+2019-05-29 David Kilzer <[email protected]>
+
+ 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 Brent Fulgham.
+
+ * 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-29 Geoffrey Garen <[email protected]>
WeakPtr breaks vtables when upcasting to base classes
Modified: trunk/Source/WTF/wtf/CrossThreadTaskHandler.cpp (245870 => 245871)
--- trunk/Source/WTF/wtf/CrossThreadTaskHandler.cpp 2019-05-29 22:04:58 UTC (rev 245870)
+++ trunk/Source/WTF/wtf/CrossThreadTaskHandler.cpp 2019-05-29 22:07:24 UTC (rev 245871)
@@ -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,8 +72,12 @@
}
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) {
m_suspendedLock.lock();
Modified: trunk/Source/WTF/wtf/CrossThreadTaskHandler.h (245870 => 245871)
--- trunk/Source/WTF/wtf/CrossThreadTaskHandler.h 2019-05-29 22:04:58 UTC (rev 245870)
+++ trunk/Source/WTF/wtf/CrossThreadTaskHandler.h 2019-05-29 22:07:24 UTC (rev 245871)
@@ -38,9 +38,10 @@
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 @@
void handleTaskRepliesOnMainThread();
void taskRunLoop();
+ AutodrainedPoolForRunLoop m_useAutodrainedPool { AutodrainedPoolForRunLoop::DoNotUse };
+
Lock m_taskThreadCreationLock;
Lock m_mainThreadReplyLock;
bool m_mainThreadReplyScheduled { false };
Modified: trunk/Source/WebCore/ChangeLog (245870 => 245871)
--- trunk/Source/WebCore/ChangeLog 2019-05-29 22:04:58 UTC (rev 245870)
+++ trunk/Source/WebCore/ChangeLog 2019-05-29 22:07:24 UTC (rev 245871)
@@ -1,3 +1,16 @@
+2019-05-29 David Kilzer <[email protected]>
+
+ 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 Brent Fulgham.
+
+ * Modules/indexeddb/server/IDBServer.cpp:
+ (WebCore::IDBServer::IDBServer::IDBServer):
+ - Pass AutodrainedPoolForRunLoop::Use when creating
+ CrossThreadTaskHandler to fix the bug.
+
2019-05-29 Geoffrey Garen <[email protected]>
WeakPtr breaks vtables when upcasting to base classes
Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp (245870 => 245871)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp 2019-05-29 22:04:58 UTC (rev 245870)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp 2019-05-29 22:07:24 UTC (rev 245871)
@@ -57,7 +57,7 @@
}
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, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter)
- : CrossThreadTaskHandler("IndexedDatabase Server")
+ : CrossThreadTaskHandler("IndexedDatabase Server", AutodrainedPoolForRunLoop::Use)
, m_sessionID(sessionID)
, m_databaseDirectoryPath(databaseDirectoryPath)
, m_backingStoreTemporaryFileHandler(fileHandler)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes