WebKit Bugzilla
Attachment 370532 Details for
Bug 198201
: Stop StorageManager when network process is ready to suspend
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-198201-20190523165916.patch (text/plain), 4.50 KB, created by
Sihui Liu
on 2019-05-23 16:59:17 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Sihui Liu
Created:
2019-05-23 16:59:17 PDT
Size:
4.50 KB
patch
obsolete
>Subversion Revision: 245660 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 430d4903961737e296b871de5ee0362775823f6e..902dac24e3e4fdf9e4e327f3cf95a7c0a24edaf3 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,22 @@ >+2019-05-23 Sihui Liu <sihui_liu@apple.com> >+ >+ Stop StorageManager when network process is ready to suspend >+ https://bugs.webkit.org/show_bug.cgi?id=198201 >+ <rdar://problem/49683172> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ To avoid local storage database operations that can hold lock to databases files, suspend thread of >+ StorageManager when network process is suspended. >+ >+ * NetworkProcess/NetworkProcess.cpp: >+ (WebKit::NetworkProcess::actualPrepareToSuspend): >+ (WebKit::NetworkProcess::resume): >+ * NetworkProcess/WebStorage/StorageManager.cpp: >+ (WebKit::StorageManager::waitUntilSuspend): >+ (WebKit::StorageManager::resume): >+ * NetworkProcess/WebStorage/StorageManager.h: >+ > 2019-05-22 Tim Horton <timothy_horton@apple.com> > > REGRESSION (r240552): PDF contents are not exposed to Accessibility (VO, etc.) >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.cpp b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >index a5d6f5cfcc7c4325e9ad73136f36fda299d1de0b..5622730150b5b278b5efccd284f6584734120719 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >@@ -2031,6 +2031,11 @@ void NetworkProcess::actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend > for (auto& server : m_swServers.values()) > server->startSuspension([delayedTaskCounter] { }); > #endif >+ >+ for (auto& IDSession : m_networkSessions) { >+ if (!IDSession.key.isEphemeral()) >+ IDSession.value->storageManager().waitUntilSuspend(); >+ } > } > > void NetworkProcess::processWillSuspendImminently() >@@ -2099,6 +2104,11 @@ void NetworkProcess::resume() > for (auto& server : m_idbServers.values()) > server->resume(); > #endif >+ >+ for (auto& IDSession : m_networkSessions) { >+ if (!IDSession.key.isEphemeral()) >+ IDSession.value->storageManager().resume(); >+ } > } > > void NetworkProcess::prefetchDNS(const String& hostname) >diff --git a/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp b/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp >index 003945053f55034c23087e90798bf9b7dfbe8623..773088ab6134f11febd676b62e375d231f9d04d0 100644 >--- a/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp >+++ b/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp >@@ -37,7 +37,6 @@ > #include <WebCore/TextEncoding.h> > #include <memory> > #include <wtf/WorkQueue.h> >-#include <wtf/threads/BinarySemaphore.h> > > namespace WebKit { > using namespace WebCore; >@@ -944,6 +943,21 @@ void StorageManager::waitUntilWritesFinished() > semaphore.wait(); > } > >+void StorageManager::waitUntilSuspend() >+{ >+ BinarySemaphore semaphore; >+ m_queue->dispatch([this, &semaphore] { >+ semaphore.signal(); >+ m_resumeSemaphore.wait(); >+ }); >+ semaphore.wait(); >+} >+ >+void StorageManager::resume() >+{ >+ m_resumeSemaphore.signal(); >+} >+ > StorageManager::StorageArea* StorageManager::findStorageArea(IPC::Connection& connection, uint64_t storageMapID) const > { > std::pair<IPC::Connection::UniqueID, uint64_t> connectionAndStorageMapIDPair(connection.uniqueID(), storageMapID); >diff --git a/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h b/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h >index a888332efcfb594130b2608846af4a182182b790..5ec06ab334c54ff740898017ed25f1d7a3520c7e 100644 >--- a/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h >+++ b/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h >@@ -33,6 +33,7 @@ > #include <wtf/Function.h> > #include <wtf/HashSet.h> > #include <wtf/text/StringHash.h> >+#include <wtf/threads/BinarySemaphore.h> > > namespace WebCore { > class SecurityOrigin; >@@ -58,6 +59,8 @@ public: > > void processDidCloseConnection(IPC::Connection&); > void waitUntilWritesFinished(); >+ void waitUntilSuspend(); >+ void resume(); > > void getSessionStorageOrigins(Function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler); > void deleteSessionStorageOrigins(Function<void()>&& completionHandler); >@@ -113,6 +116,8 @@ private: > > HashMap<WebCore::SecurityOriginData, Ref<WebCore::StorageMap>> m_ephemeralStorage; > bool m_isEphemeral { false }; >+ >+ BinarySemaphore m_resumeSemaphore; > }; > > } // namespace WebKit
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 198201
:
370532
|
370583
|
370587
|
370867
|
370887
|
370894
|
370976