Diff
Modified: trunk/Source/WebCore/ChangeLog (275890 => 275891)
--- trunk/Source/WebCore/ChangeLog 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebCore/ChangeLog 2021-04-13 16:53:46 UTC (rev 275891)
@@ -1,3 +1,17 @@
+2021-04-13 Sihui Liu <sihui_...@apple.com>
+
+ Make WebIDBServer not block main thread during initialization
+ https://bugs.webkit.org/show_bug.cgi?id=224299
+
+ Reviewed by Geoffrey Garen.
+
+ * Modules/indexeddb/server/IDBServer.cpp:
+ (WebCore::IDBServer::IDBServer::IDBServer):
+ * Modules/indexeddb/server/IDBServer.h:
+ (WebCore::IDBServer::IDBServer::lock): Deleted.
+ * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
+ (WebCore::IDBServer::UniqueIDBDatabase::abortActiveTransactions):
+
2021-04-13 Frédéric Wang <fw...@igalia.com>
ASSERTION FAILED: !m_needExceptionCheck in CloneSerializer::serialize with postMessage({g:42})
Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp (275890 => 275891)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp 2021-04-13 16:53:46 UTC (rev 275891)
@@ -44,9 +44,10 @@
namespace WebCore {
namespace IDBServer {
-IDBServer::IDBServer(PAL::SessionID sessionID, const String& databaseDirectoryPath, StorageQuotaManagerSpaceRequester&& spaceRequester)
+IDBServer::IDBServer(PAL::SessionID sessionID, const String& databaseDirectoryPath, StorageQuotaManagerSpaceRequester&& spaceRequester, Lock& lock)
: m_sessionID(sessionID)
, m_spaceRequester(WTFMove(spaceRequester))
+ , m_lock(lock)
{
ASSERT(!isMainThread());
ASSERT(databaseDirectoryPath.isSafeToSendToAnotherThread());
Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h (275890 => 275891)
--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h 2021-04-13 16:53:46 UTC (rev 275891)
@@ -53,7 +53,7 @@
WTF_MAKE_FAST_ALLOCATED;
public:
using StorageQuotaManagerSpaceRequester = Function<StorageQuotaManager::Decision(const ClientOrigin&, uint64_t spaceRequested)>;
- WEBCORE_EXPORT IDBServer(PAL::SessionID, const String& databaseDirectoryPath, StorageQuotaManagerSpaceRequester&&);
+ WEBCORE_EXPORT IDBServer(PAL::SessionID, const String& databaseDirectoryPath, StorageQuotaManagerSpaceRequester&&, Lock&);
WEBCORE_EXPORT ~IDBServer();
WEBCORE_EXPORT void registerConnection(IDBConnectionToClient&);
@@ -110,8 +110,6 @@
WEBCORE_EXPORT void stopDatabaseActivitiesOnMainThread();
- Lock& lock() { return m_lock; };
-
private:
UniqueIDBDatabase& getOrCreateUniqueIDBDatabase(const IDBDatabaseIdentifier&);
@@ -132,7 +130,7 @@
StorageQuotaManagerSpaceRequester m_spaceRequester;
- Lock m_lock;
+ Lock& m_lock;
};
} // namespace IDBServer
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (275890 => 275891)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2021-04-13 16:53:46 UTC (rev 275891)
@@ -1189,7 +1189,6 @@
void UniqueIDBDatabase::abortActiveTransactions()
{
ASSERT(isMainThread());
- ASSERT(m_server.lock().isHeld());
for (auto& identifier : copyToVector(m_inProgressTransactions.keys())) {
auto transaction = m_inProgressTransactions.get(identifier);
Modified: trunk/Source/WebKit/ChangeLog (275890 => 275891)
--- trunk/Source/WebKit/ChangeLog 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebKit/ChangeLog 2021-04-13 16:53:46 UTC (rev 275891)
@@ -1,3 +1,52 @@
+2021-04-13 Sihui Liu <sihui_...@apple.com>
+
+ Make WebIDBServer not block main thread during initialization
+ https://bugs.webkit.org/show_bug.cgi?id=224299
+
+ Reviewed by Geoffrey Garen.
+
+ Move Lock from WebCore::IDBServer to WebIDBServer so we can block background thread in suspend() when m_server
+ is uninitialized.
+
+ * NetworkProcess/IndexedDB/WebIDBServer.cpp:
+ (WebKit::m_closeCallback):
+ (WebKit::WebIDBServer::getOrigins):
+ (WebKit::WebIDBServer::closeAndDeleteDatabasesModifiedSince):
+ (WebKit::WebIDBServer::closeAndDeleteDatabasesForOrigins):
+ (WebKit::WebIDBServer::renameOrigin):
+ (WebKit::WebIDBServer::suspend):
+ (WebKit::WebIDBServer::resume):
+ (WebKit::WebIDBServer::openDatabase):
+ (WebKit::WebIDBServer::deleteDatabase):
+ (WebKit::WebIDBServer::abortTransaction):
+ (WebKit::WebIDBServer::commitTransaction):
+ (WebKit::WebIDBServer::didFinishHandlingVersionChangeTransaction):
+ (WebKit::WebIDBServer::createObjectStore):
+ (WebKit::WebIDBServer::deleteObjectStore):
+ (WebKit::WebIDBServer::renameObjectStore):
+ (WebKit::WebIDBServer::clearObjectStore):
+ (WebKit::WebIDBServer::createIndex):
+ (WebKit::WebIDBServer::deleteIndex):
+ (WebKit::WebIDBServer::renameIndex):
+ (WebKit::WebIDBServer::putOrAdd):
+ (WebKit::WebIDBServer::getRecord):
+ (WebKit::WebIDBServer::getAllRecords):
+ (WebKit::WebIDBServer::getCount):
+ (WebKit::WebIDBServer::deleteRecord):
+ (WebKit::WebIDBServer::openCursor):
+ (WebKit::WebIDBServer::iterateCursor):
+ (WebKit::WebIDBServer::establishTransaction):
+ (WebKit::WebIDBServer::databaseConnectionPendingClose):
+ (WebKit::WebIDBServer::databaseConnectionClosed):
+ (WebKit::WebIDBServer::abortOpenAndUpgradeNeeded):
+ (WebKit::WebIDBServer::didFireVersionChangeEvent):
+ (WebKit::WebIDBServer::openDBRequestCancelled):
+ (WebKit::WebIDBServer::getAllDatabaseNamesAndVersions):
+ (WebKit::WebIDBServer::addConnection):
+ (WebKit::WebIDBServer::removeConnection):
+ (WebKit::WebIDBServer::close):
+ * NetworkProcess/IndexedDB/WebIDBServer.h:
+
2021-04-13 Chris Dumez <cdu...@apple.com>
The GPUProcess should only launch when it is needed
Modified: trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp (275890 => 275891)
--- trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.cpp 2021-04-13 16:53:46 UTC (rev 275891)
@@ -30,7 +30,6 @@
#include "WebIDBServerMessages.h"
#include <WebCore/SQLiteDatabaseTracker.h>
#include <WebCore/StorageQuotaManager.h>
-#include <wtf/threads/BinarySemaphore.h>
namespace WebKit {
@@ -46,12 +45,12 @@
{
ASSERT(RunLoop::isMain());
- BinarySemaphore semaphore;
- postTask([this, protectedThis = makeRef(*this), &semaphore, sessionID, directory = directory.isolatedCopy(), spaceRequester = WTFMove(spaceRequester)] () mutable {
- m_server = makeUnique<WebCore::IDBServer::IDBServer>(sessionID, directory, WTFMove(spaceRequester));
- semaphore.signal();
+ postTask([this, protectedThis = makeRef(*this), sessionID, directory = directory.isolatedCopy(), spaceRequester = WTFMove(spaceRequester)] () mutable {
+ ASSERT(!RunLoop::isMain());
+
+ LockHolder locker(m_serverLock);
+ m_server = makeUnique<WebCore::IDBServer::IDBServer>(sessionID, directory, WTFMove(spaceRequester), m_serverLock);
});
- semaphore.wait();
}
WebIDBServer::~WebIDBServer()
@@ -68,7 +67,7 @@
postTask([this, protectedThis = makeRef(*this), callback = WTFMove(callback), token = m_dataTaskCounter.count()]() mutable {
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token), origins = crossThreadCopy(m_server->getOrigins())]() mutable {
callback(WTFMove(origins));
}));
@@ -82,7 +81,7 @@
postTask([this, protectedThis = makeRef(*this), modificationTime, callback = WTFMove(callback), token = m_dataTaskCounter.count()]() mutable {
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->closeAndDeleteDatabasesModifiedSince(modificationTime);
postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token)]() mutable {
callback();
@@ -97,7 +96,7 @@
postTask([this, protectedThis = makeRef(*this), originDatas = originDatas.isolatedCopy(), callback = WTFMove(callback), token = m_dataTaskCounter.count()] () mutable {
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->closeAndDeleteDatabasesForOrigins(originDatas);
postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token)]() mutable {
callback();
@@ -112,7 +111,7 @@
postTask([this, protectedThis = makeRef(*this), oldOrigin = oldOrigin.isolatedCopy(), newOrigin = newOrigin.isolatedCopy(), callback = WTFMove(callback), token = m_dataTaskCounter.count()] () mutable {
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->renameOrigin(oldOrigin, newOrigin);
postTaskReply(CrossThreadTask([callback = WTFMove(callback), token = WTFMove(token)]() mutable {
callback();
@@ -128,8 +127,9 @@
return;
m_isSuspended = true;
- m_server->lock().lock();
- m_server->stopDatabaseActivitiesOnMainThread();
+ m_serverLock.lock();
+ if (m_server)
+ m_server->stopDatabaseActivitiesOnMainThread();
}
void WebIDBServer::resume()
@@ -140,7 +140,7 @@
return;
m_isSuspended = false;
- m_server->lock().unlock();
+ m_serverLock.unlock();
}
void WebIDBServer::openDatabase(const WebCore::IDBRequestData& requestData)
@@ -147,7 +147,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->openDatabase(requestData);
}
@@ -155,7 +155,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->deleteDatabase(requestData);
}
@@ -163,7 +163,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->abortTransaction(transactionIdentifier);
}
@@ -171,7 +171,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->commitTransaction(transactionIdentifier);
}
@@ -179,7 +179,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->didFinishHandlingVersionChangeTransaction(databaseConnectionIdentifier, transactionIdentifier);
}
@@ -187,7 +187,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->createObjectStore(requestData, objectStoreInfo);
}
@@ -195,7 +195,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->deleteObjectStore(requestData, objectStoreName);
}
@@ -203,7 +203,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->renameObjectStore(requestData, objectStoreIdentifier, newName);
}
@@ -211,7 +211,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->clearObjectStore(requestData, objectStoreIdentifier);
}
@@ -219,7 +219,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->createIndex(requestData, indexInfo);
}
@@ -227,7 +227,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->deleteIndex(requestData, objectStoreIdentifier, indexName);
}
@@ -235,7 +235,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->renameIndex(requestData, objectStoreIdentifier, indexIdentifier, newName);
}
@@ -243,7 +243,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->putOrAdd(requestData, keyData, value, overWriteMode);
}
@@ -251,7 +251,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->getRecord(requestData, getRecordData);
}
@@ -259,7 +259,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->getAllRecords(requestData, getAllRecordsData);
}
@@ -267,7 +267,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->getCount(requestData, keyRangeData);
}
@@ -275,7 +275,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->deleteRecord(requestData, keyRangeData);
}
@@ -283,7 +283,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->openCursor(requestData, cursorInfo);
}
@@ -291,7 +291,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->iterateCursor(requestData, iterateCursorData);
}
@@ -299,7 +299,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->establishTransaction(databaseConnectionIdentifier, transactionInfo);
}
@@ -307,7 +307,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->databaseConnectionPendingClose(databaseConnectionIdentifier);
}
@@ -315,7 +315,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->databaseConnectionClosed(databaseConnectionIdentifier);
}
@@ -323,7 +323,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier);
}
@@ -331,7 +331,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier, connectionClosed);
}
@@ -339,7 +339,7 @@
{
ASSERT(!RunLoop::isMain());
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->openDBRequestCancelled(requestData);
}
@@ -350,7 +350,7 @@
auto* webIDBConnection = m_connectionMap.get(connection.uniqueID());
ASSERT(webIDBConnection);
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->getAllDatabaseNamesAndVersions(webIDBConnection->identifier(), requestIdentifier, origin);
}
@@ -365,7 +365,7 @@
ASSERT_UNUSED(isNewEntry, isNewEntry);
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->registerConnection(iter->value->connectionToClient());
});
m_connections.add(&connection);
@@ -386,7 +386,7 @@
ASSERT(connection);
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->unregisterConnection(connection->connectionToClient());
});
@@ -422,8 +422,9 @@
postTask([this]() mutable {
m_connectionMap.clear();
+
+ LockHolder locker(m_serverLock);
m_server = nullptr;
-
CrossThreadTaskHandler::kill();
});
Modified: trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.h (275890 => 275891)
--- trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.h 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBServer.h 2021-04-13 16:53:46 UTC (rev 275891)
@@ -97,6 +97,7 @@
void tryClose();
+ Lock m_serverLock;
std::unique_ptr<WebCore::IDBServer::IDBServer> m_server;
bool m_isSuspended { false };
Modified: trunk/Source/WebKitLegacy/ChangeLog (275890 => 275891)
--- trunk/Source/WebKitLegacy/ChangeLog 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebKitLegacy/ChangeLog 2021-04-13 16:53:46 UTC (rev 275891)
@@ -1,3 +1,41 @@
+2021-04-13 Sihui Liu <sihui_...@apple.com>
+
+ Make WebIDBServer not block main thread during initialization
+ https://bugs.webkit.org/show_bug.cgi?id=224299
+
+ Reviewed by Geoffrey Garen.
+
+ * Storage/InProcessIDBServer.cpp:
+ (InProcessIDBServer::InProcessIDBServer):
+ (InProcessIDBServer::deleteDatabase):
+ (InProcessIDBServer::openDatabase):
+ (InProcessIDBServer::abortTransaction):
+ (InProcessIDBServer::commitTransaction):
+ (InProcessIDBServer::didFinishHandlingVersionChangeTransaction):
+ (InProcessIDBServer::createObjectStore):
+ (InProcessIDBServer::deleteObjectStore):
+ (InProcessIDBServer::renameObjectStore):
+ (InProcessIDBServer::clearObjectStore):
+ (InProcessIDBServer::createIndex):
+ (InProcessIDBServer::deleteIndex):
+ (InProcessIDBServer::renameIndex):
+ (InProcessIDBServer::putOrAdd):
+ (InProcessIDBServer::getRecord):
+ (InProcessIDBServer::getAllRecords):
+ (InProcessIDBServer::getCount):
+ (InProcessIDBServer::deleteRecord):
+ (InProcessIDBServer::openCursor):
+ (InProcessIDBServer::iterateCursor):
+ (InProcessIDBServer::establishTransaction):
+ (InProcessIDBServer::databaseConnectionPendingClose):
+ (InProcessIDBServer::databaseConnectionClosed):
+ (InProcessIDBServer::abortOpenAndUpgradeNeeded):
+ (InProcessIDBServer::didFireVersionChangeEvent):
+ (InProcessIDBServer::openDBRequestCancelled):
+ (InProcessIDBServer::getAllDatabaseNamesAndVersions):
+ (InProcessIDBServer::closeAndDeleteDatabasesModifiedSince):
+ * Storage/InProcessIDBServer.h:
+
2021-04-08 Sihui Liu <sihui_...@apple.com>
Remove logging for investigating http/tests/IndexedDB/storage-limit-1.html failure
Modified: trunk/Source/WebKitLegacy/Storage/InProcessIDBServer.cpp (275890 => 275891)
--- trunk/Source/WebKitLegacy/Storage/InProcessIDBServer.cpp 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebKitLegacy/Storage/InProcessIDBServer.cpp 2021-04-13 16:53:46 UTC (rev 275891)
@@ -96,9 +96,9 @@
m_thread->start();
dispatchTask([this, protectedThis = makeRef(*this), sessionID, directory = databaseDirectoryPath.isolatedCopy(), spaceRequester = storageQuotaManagerSpaceRequester(*this)] () mutable {
m_connectionToClient = IDBServer::IDBConnectionToClient::create(*this);
- m_server = makeUnique<IDBServer::IDBServer>(sessionID, directory, WTFMove(spaceRequester));
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
+ m_server = makeUnique<IDBServer::IDBServer>(sessionID, directory, WTFMove(spaceRequester), m_serverLock);
m_server->registerConnection(*m_connectionToClient);
});
}
@@ -123,7 +123,7 @@
void InProcessIDBServer::deleteDatabase(const WebCore::IDBRequestData& requestData)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->deleteDatabase(requestData);
});
}
@@ -138,7 +138,7 @@
void InProcessIDBServer::openDatabase(const WebCore::IDBRequestData& requestData)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->openDatabase(requestData);
});
}
@@ -265,7 +265,7 @@
void InProcessIDBServer::abortTransaction(const WebCore::IDBResourceIdentifier& resourceIdentifier)
{
dispatchTask([this, protectedThis = makeRef(*this), resourceIdentifier = resourceIdentifier.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->abortTransaction(resourceIdentifier);
});
}
@@ -273,7 +273,7 @@
void InProcessIDBServer::commitTransaction(const WebCore::IDBResourceIdentifier& resourceIdentifier)
{
dispatchTask([this, protectedThis = makeRef(*this), resourceIdentifier = resourceIdentifier.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->commitTransaction(resourceIdentifier);
});
}
@@ -281,7 +281,7 @@
void InProcessIDBServer::didFinishHandlingVersionChangeTransaction(uint64_t databaseConnectionIdentifier, const WebCore::IDBResourceIdentifier& transactionIdentifier)
{
dispatchTask([this, protectedThis = makeRef(*this), databaseConnectionIdentifier, transactionIdentifier = transactionIdentifier.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->didFinishHandlingVersionChangeTransaction(databaseConnectionIdentifier, transactionIdentifier);
});
}
@@ -289,7 +289,7 @@
void InProcessIDBServer::createObjectStore(const WebCore::IDBRequestData& resultData, const IDBObjectStoreInfo& info)
{
dispatchTask([this, protectedThis = makeRef(*this), resultData = resultData.isolatedCopy(), info = info.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->createObjectStore(resultData, info);
});
}
@@ -297,7 +297,7 @@
void InProcessIDBServer::deleteObjectStore(const WebCore::IDBRequestData& requestData, const String& objectStoreName)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), objectStoreName = objectStoreName.isolatedCopy()] () mutable {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->deleteObjectStore(requestData, objectStoreName);
});
}
@@ -305,7 +305,7 @@
void InProcessIDBServer::renameObjectStore(const WebCore::IDBRequestData& requestData, uint64_t objectStoreIdentifier, const String& newName)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), objectStoreIdentifier, newName = newName.isolatedCopy()] () mutable {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->renameObjectStore(requestData, objectStoreIdentifier, newName);
});
}
@@ -313,7 +313,7 @@
void InProcessIDBServer::clearObjectStore(const WebCore::IDBRequestData& requestData, uint64_t objectStoreIdentifier)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), objectStoreIdentifier] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->clearObjectStore(requestData, objectStoreIdentifier);
});
}
@@ -321,7 +321,7 @@
void InProcessIDBServer::createIndex(const WebCore::IDBRequestData& requestData, const IDBIndexInfo& info)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), info = info.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->createIndex(requestData, info);
});
}
@@ -329,7 +329,7 @@
void InProcessIDBServer::deleteIndex(const WebCore::IDBRequestData& requestData, uint64_t objectStoreIdentifier, const String& indexName)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), objectStoreIdentifier, indexName = indexName.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->deleteIndex(requestData, objectStoreIdentifier, indexName);
});
}
@@ -337,7 +337,7 @@
void InProcessIDBServer::renameIndex(const WebCore::IDBRequestData& requestData, uint64_t objectStoreIdentifier, uint64_t indexIdentifier, const String& newName)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), objectStoreIdentifier, indexIdentifier, newName = newName.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->renameIndex(requestData, objectStoreIdentifier, indexIdentifier, newName);
});
}
@@ -345,7 +345,7 @@
void InProcessIDBServer::putOrAdd(const WebCore::IDBRequestData& requestData, const IDBKeyData& keyData, const IDBValue& value, const IndexedDB::ObjectStoreOverwriteMode overwriteMode)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), keyData = keyData.isolatedCopy(), value = value.isolatedCopy(), overwriteMode] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->putOrAdd(requestData, keyData, value, overwriteMode);
});
}
@@ -353,7 +353,7 @@
void InProcessIDBServer::getRecord(const WebCore::IDBRequestData& requestData, const IDBGetRecordData& getRecordData)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), getRecordData = getRecordData.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->getRecord(requestData, getRecordData);
});
}
@@ -361,7 +361,7 @@
void InProcessIDBServer::getAllRecords(const WebCore::IDBRequestData& requestData, const IDBGetAllRecordsData& getAllRecordsData)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), getAllRecordsData = getAllRecordsData.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->getAllRecords(requestData, getAllRecordsData);
});
}
@@ -369,7 +369,7 @@
void InProcessIDBServer::getCount(const WebCore::IDBRequestData& requestData, const IDBKeyRangeData& keyRangeData)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), keyRangeData = keyRangeData.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->getCount(requestData, keyRangeData);
});
}
@@ -377,7 +377,7 @@
void InProcessIDBServer::deleteRecord(const WebCore::IDBRequestData& requestData, const IDBKeyRangeData& keyRangeData)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), keyRangeData = keyRangeData.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->deleteRecord(requestData, keyRangeData);
});
}
@@ -385,7 +385,7 @@
void InProcessIDBServer::openCursor(const WebCore::IDBRequestData& requestData, const IDBCursorInfo& info)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), info = info.isolatedCopy()] () mutable {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->openCursor(requestData, info);
});
}
@@ -393,7 +393,7 @@
void InProcessIDBServer::iterateCursor(const WebCore::IDBRequestData& requestData, const IDBIterateCursorData& data)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy(), data = "" {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->iterateCursor(requestData, data);
});
}
@@ -401,7 +401,7 @@
void InProcessIDBServer::establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo& info)
{
dispatchTask([this, protectedThis = makeRef(*this), databaseConnectionIdentifier, info = info.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->establishTransaction(databaseConnectionIdentifier, info);
});
}
@@ -437,7 +437,7 @@
void InProcessIDBServer::databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier)
{
dispatchTask([this, protectedThis = makeRef(*this), databaseConnectionIdentifier] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->databaseConnectionPendingClose(databaseConnectionIdentifier);
});
}
@@ -445,7 +445,7 @@
void InProcessIDBServer::databaseConnectionClosed(uint64_t databaseConnectionIdentifier)
{
dispatchTask([this, protectedThis = makeRef(*this), databaseConnectionIdentifier] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->databaseConnectionClosed(databaseConnectionIdentifier);
});
}
@@ -453,7 +453,7 @@
void InProcessIDBServer::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const WebCore::IDBResourceIdentifier& transactionIdentifier)
{
dispatchTask([this, protectedThis = makeRef(*this), databaseConnectionIdentifier, transactionIdentifier = transactionIdentifier.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier);
});
}
@@ -461,7 +461,7 @@
void InProcessIDBServer::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const WebCore::IDBResourceIdentifier& requestIdentifier, const IndexedDB::ConnectionClosedOnBehalfOfServer connectionClosed)
{
dispatchTask([this, protectedThis = makeRef(*this), databaseConnectionIdentifier, requestIdentifier = requestIdentifier.isolatedCopy(), connectionClosed] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier, connectionClosed);
});
}
@@ -469,7 +469,7 @@
void InProcessIDBServer::openDBRequestCancelled(const WebCore::IDBRequestData& requestData)
{
dispatchTask([this, protectedThis = makeRef(*this), requestData = requestData.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->openDBRequestCancelled(requestData);
});
}
@@ -477,7 +477,7 @@
void InProcessIDBServer::getAllDatabaseNamesAndVersions(const WebCore::IDBResourceIdentifier& requestIdentifier, const ClientOrigin& origin)
{
dispatchTask([this, protectedThis = makeRef(*this), identifier = m_connectionToServer->identifier(), requestIdentifier, origin = origin.isolatedCopy()] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->getAllDatabaseNamesAndVersions(identifier, requestIdentifier, origin);
});
}
@@ -492,7 +492,7 @@
void InProcessIDBServer::closeAndDeleteDatabasesModifiedSince(WallTime modificationTime)
{
dispatchTask([this, protectedThis = makeRef(*this), modificationTime] {
- LockHolder locker(m_server->lock());
+ LockHolder locker(m_serverLock);
m_server->closeAndDeleteDatabasesModifiedSince(modificationTime);
});
}
Modified: trunk/Source/WebKitLegacy/Storage/InProcessIDBServer.h (275890 => 275891)
--- trunk/Source/WebKitLegacy/Storage/InProcessIDBServer.h 2021-04-13 16:50:41 UTC (rev 275890)
+++ trunk/Source/WebKitLegacy/Storage/InProcessIDBServer.h 2021-04-13 16:53:46 UTC (rev 275891)
@@ -126,6 +126,7 @@
private:
InProcessIDBServer(PAL::SessionID, const String& databaseDirectoryPath = nullString());
+ Lock m_serverLock;
std::unique_ptr<WebCore::IDBServer::IDBServer> m_server;
RefPtr<WebCore::IDBClient::IDBConnectionToServer> m_connectionToServer;
RefPtr<WebCore::IDBServer::IDBConnectionToClient> m_connectionToClient;