<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[188594] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/188594">188594</a></dd>
<dt>Author</dt> <dd>fpizlo@apple.com</dd>
<dt>Date</dt> <dd>2015-08-18 12:31:28 -0700 (Tue, 18 Aug 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Replace all remaining uses of WTF::Mutex with WTF::Lock
https://bugs.webkit.org/show_bug.cgi?id=148089
Reviewed by Geoffrey Garen.
Source/WebCore:
No new tests because no new behavior.
* Modules/webaudio/AsyncAudioDecoder.cpp:
(WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
(WebCore::AsyncAudioDecoder::runLoop):
* Modules/webaudio/AsyncAudioDecoder.h:
* Modules/webaudio/AudioContext.h:
* Modules/webaudio/MediaStreamAudioSource.cpp:
(WebCore::MediaStreamAudioSource::addAudioConsumer):
(WebCore::MediaStreamAudioSource::removeAudioConsumer):
(WebCore::MediaStreamAudioSource::setAudioFormat):
(WebCore::MediaStreamAudioSource::consumeAudio):
* Modules/webaudio/MediaStreamAudioSource.h:
* Modules/webdatabase/Database.cpp:
(WebCore::Database::close):
(WebCore::Database::runTransaction):
(WebCore::Database::inProgressTransactionCompleted):
(WebCore::Database::hasPendingTransaction):
* Modules/webdatabase/Database.h:
* Modules/webdatabase/DatabaseTask.cpp:
(WebCore::DatabaseTaskSynchronizer::taskCompleted):
* Modules/webdatabase/DatabaseTask.h:
* Modules/webdatabase/DatabaseThread.cpp:
(WebCore::DatabaseThread::start):
(WebCore::DatabaseThread::databaseThread):
* Modules/webdatabase/DatabaseThread.h:
* Modules/webdatabase/DatabaseTracker.cpp:
(WebCore::DatabaseTracker::setDatabaseDirectoryPath):
(WebCore::DatabaseTracker::canEstablishDatabase):
(WebCore::DatabaseTracker::retryCanEstablishDatabase):
(WebCore::DatabaseTracker::hasEntryForOrigin):
(WebCore::DatabaseTracker::getMaxSizeForDatabase):
(WebCore::DatabaseTracker::closeAllDatabases):
(WebCore::DatabaseTracker::fullPathForDatabase):
(WebCore::DatabaseTracker::origins):
(WebCore::DatabaseTracker::databaseNamesForOrigin):
(WebCore::DatabaseTracker::detailsForNameAndOrigin):
(WebCore::DatabaseTracker::setDatabaseDetails):
(WebCore::DatabaseTracker::doneCreatingDatabase):
(WebCore::DatabaseTracker::addOpenDatabase):
(WebCore::DatabaseTracker::removeOpenDatabase):
(WebCore::DatabaseTracker::getOpenDatabases):
(WebCore::DatabaseTracker::originLockFor):
(WebCore::DatabaseTracker::quotaForOrigin):
(WebCore::DatabaseTracker::setQuota):
(WebCore::DatabaseTracker::deleteOrigin):
(WebCore::DatabaseTracker::deleteDatabase):
(WebCore::DatabaseTracker::deleteDatabaseFile):
(WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
(WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
(WebCore::DatabaseTracker::openDatabaseMutex):
(WebCore::DatabaseTracker::setClient):
(WebCore::notificationMutex):
(WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
(WebCore::DatabaseTracker::notifyDatabasesChanged):
* Modules/webdatabase/DatabaseTracker.h:
* Modules/webdatabase/OriginLock.h:
* Modules/webdatabase/SQLCallbackWrapper.h:
(WebCore::SQLCallbackWrapper::clear):
(WebCore::SQLCallbackWrapper::unwrap):
(WebCore::SQLCallbackWrapper::hasCallback):
* Modules/webdatabase/SQLTransactionBackend.cpp:
(WebCore::SQLTransactionBackend::doCleanup):
(WebCore::SQLTransactionBackend::enqueueStatementBackend):
(WebCore::SQLTransactionBackend::getNextStatement):
* Modules/webdatabase/SQLTransactionBackend.h:
* bindings/js/WorkerScriptController.cpp:
(WebCore::WorkerScriptController::scheduleExecutionTermination):
(WebCore::WorkerScriptController::isExecutionTerminating):
* bindings/js/WorkerScriptController.h:
* dom/default/PlatformMessagePortChannel.cpp:
(WebCore::MessagePortChannel::postMessageToRemote):
(WebCore::MessagePortChannel::tryGetMessageFromRemote):
(WebCore::MessagePortChannel::isConnectedTo):
(WebCore::MessagePortChannel::hasPendingActivity):
(WebCore::MessagePortChannel::locallyEntangledPort):
(WebCore::PlatformMessagePortChannel::setRemotePort):
(WebCore::PlatformMessagePortChannel::entangledChannel):
(WebCore::PlatformMessagePortChannel::closeInternal):
* dom/default/PlatformMessagePortChannel.h:
* loader/icon/IconDatabase.cpp:
(WebCore::IconDatabase::removeAllIcons):
(WebCore::IconDatabase::synchronousIconForPageURL):
(WebCore::IconDatabase::synchronousNativeIconForPageURL):
(WebCore::IconDatabase::synchronousIconURLForPageURL):
(WebCore::IconDatabase::retainIconForPageURL):
(WebCore::IconDatabase::performRetainIconForPageURL):
(WebCore::IconDatabase::releaseIconForPageURL):
(WebCore::IconDatabase::performReleaseIconForPageURL):
(WebCore::IconDatabase::setIconDataForIconURL):
(WebCore::IconDatabase::setIconURLForPageURL):
(WebCore::IconDatabase::synchronousLoadDecisionForIconURL):
(WebCore::IconDatabase::synchronousIconDataKnownForIconURL):
(WebCore::IconDatabase::pageURLMappingCount):
(WebCore::IconDatabase::retainedPageURLCount):
(WebCore::IconDatabase::iconRecordCount):
(WebCore::IconDatabase::iconRecordCountWithData):
(WebCore::IconDatabase::wakeSyncThread):
(WebCore::IconDatabase::scheduleOrDeferSyncTimer):
(WebCore::IconDatabase::isOpenBesidesMainThreadCallbacks):
(WebCore::IconDatabase::databasePath):
(WebCore::IconDatabase::getOrCreatePageURLRecord):
(WebCore::IconDatabase::iconDatabaseSyncThread):
(WebCore::IconDatabase::performOpenInitialization):
(WebCore::IconDatabase::performURLImport):
(WebCore::IconDatabase::syncThreadMainLoop):
(WebCore::IconDatabase::performPendingRetainAndReleaseOperations):
(WebCore::IconDatabase::readFromDatabase):
(WebCore::IconDatabase::writeToDatabase):
(WebCore::IconDatabase::pruneUnretainedIcons):
(WebCore::IconDatabase::cleanupSyncThread):
* loader/icon/IconDatabase.h:
* page/scrolling/ScrollingTree.cpp:
(WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
(WebCore::ScrollingTree::commitNewTreeState):
(WebCore::ScrollingTree::setMainFramePinState):
(WebCore::ScrollingTree::mainFrameScrollPosition):
(WebCore::ScrollingTree::setMainFrameScrollPosition):
(WebCore::ScrollingTree::isPointInNonFastScrollableRegion):
(WebCore::ScrollingTree::isRubberBandInProgress):
(WebCore::ScrollingTree::setMainFrameIsRubberBanding):
(WebCore::ScrollingTree::isScrollSnapInProgress):
(WebCore::ScrollingTree::setMainFrameIsScrollSnapping):
(WebCore::ScrollingTree::setCanRubberBandState):
(WebCore::ScrollingTree::rubberBandsAtLeft):
(WebCore::ScrollingTree::rubberBandsAtRight):
(WebCore::ScrollingTree::rubberBandsAtBottom):
(WebCore::ScrollingTree::rubberBandsAtTop):
(WebCore::ScrollingTree::setScrollPinningBehavior):
(WebCore::ScrollingTree::scrollPinningBehavior):
(WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
(WebCore::ScrollingTree::latchedNode):
(WebCore::ScrollingTree::setLatchedNode):
(WebCore::ScrollingTree::clearLatchedNode):
* page/scrolling/ScrollingTree.h:
* platform/MemoryPressureHandler.h:
* platform/audio/HRTFDatabaseLoader.cpp:
(WebCore::HRTFDatabaseLoader::loadAsynchronously):
(WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
* platform/audio/HRTFDatabaseLoader.h:
* platform/cocoa/MemoryPressureHandlerCocoa.mm:
(WebCore::MemoryPressureHandler::setReceivedMemoryPressure):
(WebCore::MemoryPressureHandler::clearMemoryPressure):
(WebCore::MemoryPressureHandler::shouldWaitForMemoryClearMessage):
(WebCore::MemoryPressureHandler::respondToMemoryPressureIfNeeded):
* platform/graphics/DisplayRefreshMonitor.cpp:
(WebCore::DisplayRefreshMonitor::displayDidRefresh):
* platform/graphics/DisplayRefreshMonitor.h:
(WebCore::DisplayRefreshMonitor::setMonotonicAnimationStartTime):
(WebCore::DisplayRefreshMonitor::mutex):
* platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
(WebCore::MediaPlayerPrivateAVFoundation::setDelayCallbacks):
(WebCore::MediaPlayerPrivateAVFoundation::clearMainThreadPendingFlag):
(WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
* platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
* platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
(WebCore::AVFWrapper::callbackContext):
(WebCore::AVFWrapper::~AVFWrapper):
(WebCore::AVFWrapper::mapLock):
(WebCore::AVFWrapper::addToMap):
(WebCore::AVFWrapper::removeFromMap):
(WebCore::AVFWrapper::periodicTimeObserverCallback):
(WebCore::AVFWrapper::processNotification):
(WebCore::AVFWrapper::loadPlayableCompletionCallback):
(WebCore::AVFWrapper::loadMetadataCompletionCallback):
(WebCore::AVFWrapper::seekCompletedCallback):
(WebCore::AVFWrapper::processCue):
(WebCore::AVFWrapper::legibleOutputCallback):
(WebCore::AVFWrapper::processShouldWaitForLoadingOfResource):
(WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):
* platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
(WebCore::InbandTextTrackPrivateGStreamer::handleSample):
(WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
* platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
* platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
(WebCore::TrackPrivateBaseGStreamer::tagsChanged):
(WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):
* platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
* platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
(WebCore::DisplayRefreshMonitorMac::requestRefreshCallback):
(WebCore::DisplayRefreshMonitorMac::displayLinkFired):
* platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
(WebCore::MediaPlayerPrivateMediaFoundation::addListener):
(WebCore::MediaPlayerPrivateMediaFoundation::removeListener):
(WebCore::MediaPlayerPrivateMediaFoundation::notifyDeleted):
(WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
(WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
* platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
* platform/ios/LegacyTileCache.h:
* platform/ios/LegacyTileCache.mm:
(WebCore::LegacyTileCache::setTilesOpaque):
(WebCore::LegacyTileCache::doLayoutTiles):
(WebCore::LegacyTileCache::setCurrentScale):
(WebCore::LegacyTileCache::commitScaleChange):
(WebCore::LegacyTileCache::layoutTilesNow):
(WebCore::LegacyTileCache::layoutTilesNowForRect):
(WebCore::LegacyTileCache::removeAllNonVisibleTiles):
(WebCore::LegacyTileCache::removeAllTiles):
(WebCore::LegacyTileCache::removeForegroundTiles):
(WebCore::LegacyTileCache::setContentReplacementImage):
(WebCore::LegacyTileCache::contentReplacementImage):
(WebCore::LegacyTileCache::tileCreationTimerFired):
(WebCore::LegacyTileCache::setNeedsDisplayInRect):
(WebCore::LegacyTileCache::updateTilingMode):
(WebCore::LegacyTileCache::setTilingMode):
(WebCore::LegacyTileCache::doPendingRepaints):
(WebCore::LegacyTileCache::flushSavedDisplayRects):
(WebCore::LegacyTileCache::prepareToDraw):
* platform/ios/LegacyTileLayerPool.h:
* platform/ios/LegacyTileLayerPool.mm:
(WebCore::LegacyTileLayerPool::addLayer):
(WebCore::LegacyTileLayerPool::takeLayerWithSize):
(WebCore::LegacyTileLayerPool::setCapacity):
(WebCore::LegacyTileLayerPool::prune):
(WebCore::LegacyTileLayerPool::drain):
* platform/network/curl/CurlDownload.cpp:
(WebCore::CurlDownloadManager::add):
(WebCore::CurlDownloadManager::remove):
(WebCore::CurlDownloadManager::getActiveDownloadCount):
(WebCore::CurlDownloadManager::getPendingDownloadCount):
(WebCore::CurlDownloadManager::stopThreadIfIdle):
(WebCore::CurlDownloadManager::updateHandleList):
(WebCore::CurlDownload::~CurlDownload):
(WebCore::CurlDownload::init):
(WebCore::CurlDownload::getTempPath):
(WebCore::CurlDownload::getUrl):
(WebCore::CurlDownload::getResponse):
(WebCore::CurlDownload::closeFile):
(WebCore::CurlDownload::didReceiveHeader):
(WebCore::CurlDownload::didReceiveData):
(WebCore::CurlDownload::didFail):
* platform/network/curl/CurlDownload.h:
* platform/network/curl/ResourceHandleManager.cpp:
(WebCore::cookieJarPath):
(WebCore::sharedResourceMutex):
(WebCore::curl_lock_callback):
(WebCore::curl_unlock_callback):
* platform/network/ios/QuickLook.mm:
(WebCore::QLDirectoryAttributes):
(qlPreviewConverterDictionaryMutex):
(WebCore::addQLPreviewConverterWithFileForURL):
(WebCore::qlPreviewConverterUTIForURL):
(WebCore::removeQLPreviewConverterForURL):
(WebCore::safeQLURLForDocumentURLAndResourceURL):
* platform/sql/SQLiteDatabase.cpp:
(WebCore::SQLiteDatabase::close):
(WebCore::SQLiteDatabase::maximumSize):
(WebCore::SQLiteDatabase::setMaximumSize):
(WebCore::SQLiteDatabase::pageSize):
(WebCore::SQLiteDatabase::freeSpaceSize):
(WebCore::SQLiteDatabase::totalSize):
(WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
(WebCore::SQLiteDatabase::setAuthorizer):
* platform/sql/SQLiteDatabase.h:
(WebCore::SQLiteDatabase::databaseMutex):
* platform/sql/SQLiteStatement.cpp:
(WebCore::SQLiteStatement::prepare):
(WebCore::SQLiteStatement::step):
* workers/WorkerThread.cpp:
(WebCore::WorkerThread::start):
(WebCore::WorkerThread::workerThread):
(WebCore::WorkerThread::stop):
* workers/WorkerThread.h:
Source/WebKit:
* Storage/StorageAreaSync.cpp:
(WebCore::StorageAreaSync::syncTimerFired):
(WebCore::StorageAreaSync::markImported):
(WebCore::StorageAreaSync::blockUntilImportComplete):
(WebCore::StorageAreaSync::performSync):
* Storage/StorageAreaSync.h:
* Storage/StorageTracker.cpp:
(WebCore::StorageTracker::setDatabaseDirectoryPath):
(WebCore::StorageTracker::finishedImportingOriginIdentifiers):
(WebCore::StorageTracker::syncImportOriginIdentifiers):
(WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
(WebCore::StorageTracker::setOriginDetails):
(WebCore::StorageTracker::syncSetOriginDetails):
(WebCore::StorageTracker::origins):
(WebCore::StorageTracker::deleteAllOrigins):
(WebCore::StorageTracker::syncDeleteAllOrigins):
(WebCore::StorageTracker::deleteOrigin):
(WebCore::StorageTracker::syncDeleteOrigin):
(WebCore::StorageTracker::canDeleteOrigin):
(WebCore::StorageTracker::cancelDeletingOrigin):
(WebCore::StorageTracker::diskUsageForOrigin):
* Storage/StorageTracker.h:
Source/WebKit/ios:
* WebCoreSupport/WebFixedPositionContent.mm:
(WebFixedPositionContentDataLock):
(-[WebFixedPositionContent scrollOrZoomChanged:]):
(-[WebFixedPositionContent overflowScrollPositionForLayer:changedTo:]):
(-[WebFixedPositionContent setViewportConstrainedLayers:stickyContainerMap:]):
(-[WebFixedPositionContent hasFixedOrStickyPositionLayers]):
(-[WebFixedPositionContent minimumOffsetFromFixedPositionLayersToAnchorEdge:ofRect:inLayer:]):
Source/WebKit/mac:
* Storage/WebDatabaseManager.mm:
(transactionBackgroundTaskIdentifierLock):
(+[WebDatabaseManager startBackgroundTask]):
(+[WebDatabaseManager endBackgroundTask]):
* WebView/WebView.mm:
(-[WebView _synchronizeCustomFixedPositionLayoutRect]):
(-[WebView _setCustomFixedPositionLayoutRectInWebThread:synchronize:]):
(-[WebView _setCustomFixedPositionLayoutRect:]):
(-[WebView _fetchCustomFixedPositionLayoutRect:]):
* WebView/WebViewData.h:
Source/WebKit/win:
* Plugins/PluginMainThreadScheduler.cpp:
(WebCore::PluginMainThreadScheduler::scheduleCall):
(WebCore::PluginMainThreadScheduler::registerPlugin):
(WebCore::PluginMainThreadScheduler::unregisterPlugin):
(WebCore::PluginMainThreadScheduler::dispatchCallsForPlugin):
* Plugins/PluginMainThreadScheduler.h:
* WebIconDatabase.cpp:
(WebIconDatabase::didRemoveAllIcons):
(WebIconDatabase::didImportIconURLForPageURL):
(WebIconDatabase::deliverNotifications):
* WebIconDatabase.h:
* WebLocalizableStrings.cpp:
(mainBundleLocStrings):
(frameworkLocStringsMutex):
(findCachedString):
(cacheString):
Source/WebKit2:
* DatabaseProcess/DatabaseProcess.cpp:
(WebKit::DatabaseProcess::postDatabaseTask):
(WebKit::DatabaseProcess::performNextDatabaseTask):
* DatabaseProcess/DatabaseProcess.h:
* DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
(WebKit::UniqueIDBDatabase::shutdown):
(WebKit::UniqueIDBDatabase::postMainThreadTask):
(WebKit::UniqueIDBDatabase::performNextMainThreadTask):
(WebKit::UniqueIDBDatabase::postDatabaseTask):
(WebKit::UniqueIDBDatabase::performNextDatabaseTask):
* DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
* Platform/IPC/Connection.cpp:
(IPC::Connection::sendSyncMessage):
(IPC::Connection::sendSyncMessageFromSecondaryThread):
(IPC::Connection::waitForSyncReply):
(IPC::Connection::processIncomingSyncReply):
(IPC::Connection::connectionDidClose):
* Platform/IPC/Connection.h:
* Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
(WebKit::CoordinatedGraphicsScene::appendUpdate):
* Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
* Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
(WebKit::ThreadedCompositor::createCompositingThread):
(WebKit::ThreadedCompositor::runCompositingThread):
(WebKit::ThreadedCompositor::terminateCompositingThread):
* Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
* Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
(WebKit::CustomProtocolManager::addCustomProtocol):
(WebKit::CustomProtocolManager::removeCustomProtocol):
(WebKit::CustomProtocolManager::registerScheme):
(WebKit::CustomProtocolManager::unregisterScheme):
(WebKit::CustomProtocolManager::supportsScheme):
(WebKit::CustomProtocolManager::protocolForID):
* Shared/Network/CustomProtocols/CustomProtocolManager.h:
* Shared/linux/SeccompFilters/SeccompBroker.cpp:
* WebProcess/Plugins/PluginProcessConnectionManager.cpp:
(WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
(WebKit::PluginProcessConnectionManager::removePluginProcessConnection):
(WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
* WebProcess/Plugins/PluginProcessConnectionManager.h:
* WebProcess/WebPage/EventDispatcher.cpp:
(WebKit::EventDispatcher::addScrollingTreeForPage):
(WebKit::EventDispatcher::removeScrollingTreeForPage):
(WebKit::EventDispatcher::wheelEvent):
* WebProcess/WebPage/EventDispatcher.h:
* WebProcess/soup/WebKitSoupRequestInputStream.cpp:
(webkitSoupRequestInputStreamReadAsync):
(webkitSoupRequestInputStreamAddData):
Source/WTF:
This also beefs up and rationalizes the Condition API, so that it can deal with units of time
other than just steady_clock. This makes it easier to port ThreadCondition and
std::condition_variable code over to Condition. This patch does not take a position on what
kind of time is best; from reading a lot of the uses in WebCore, it seems like our use of
double to measure seconds is often nicer than the many different classes in std::chrono.
Also added a Condition speed test, to make sure that all of this is a good idea. And indeed it
is. The 1-producer/1-consumer scenario with a 100-element queue runs 36x faster using
Lock/Condition than Mutex/ThreadCondition when you use the notifyOne()-per-enqueue style. It
runs 58x faster with Lock/Condition when you use the notifyAll()-at-boundary style. Note that
I have a bug open for making the notifyOne()-per-enqueue style even faster:
https://bugs.webkit.org/show_bug.cgi?id=148090. Also, the 10-consumer/10-producer scenario with
a 100-element queue runs 20x faster with Lock/Condition for notifyOne()-per-enqueue and 30x
faster with notifyAll()-at-boundary. The only way to tweak the test to get
Mutex/ThreadCondition to win is to have one producer, one consumer, a 1-element queue, and use
the notifyOne()-per-enqueue style. In that case, one of the two threads is going to be waiting
most of the time and the test basically measures wake-up latency and nothing else. Because
Condition::wait() does a little bit more work than ThreadCondition::wait(),
Mutex/ThreadCondition end up running 3% faster in this test case. But if you vary any of the
parameters of the test, Mutex/ThreadCondition ends up losing - all it takes is more threads or
a queue size of 5 or more. To my knowledge, we never do producer/consumer with a queue bounded
to one element precisely because that approach is the least efficient regardless of locking
algorithm. For example, neither WTF::MessageQueue nor DFG::Worklist have any bounds on their
queue size. So, it seems that replacing all uses of system mutexes and condition variables with
our own thing is a great idea.
* benchmarks/LockSpeedTest.cpp:
* benchmarks/ConditionSpeedTest.cpp: Added.
* wtf/Condition.h:
(WTF::Condition::Condition):
(WTF::Condition::waitUntil):
(WTF::Condition::waitFor):
(WTF::Condition::wait):
(WTF::Condition::waitUntilWallClockSeconds):
(WTF::Condition::waitUntilMonotonicClockSeconds):
(WTF::Condition::notifyOne):
(WTF::Condition::notifyAll):
(WTF::Condition::waitForSecondsImpl):
(WTF::Condition::waitForImpl):
(WTF::Condition::absoluteFromRelative):
* wtf/MessageQueue.h:
(WTF::MessageQueue::infiniteTime):
(WTF::MessageQueue<DataType>::append):
(WTF::MessageQueue<DataType>::appendAndKill):
(WTF::MessageQueue<DataType>::appendAndCheckEmpty):
(WTF::MessageQueue<DataType>::prepend):
(WTF::MessageQueue<DataType>::removeIf):
(WTF::MessageQueue<DataType>::isEmpty):
(WTF::MessageQueue<DataType>::kill):
(WTF::MessageQueue<DataType>::killed):
* wtf/ParallelJobsGeneric.cpp:
(WTF::ParallelEnvironment::ThreadPrivate::execute):
(WTF::ParallelEnvironment::ThreadPrivate::waitForFinish):
(WTF::ParallelEnvironment::ThreadPrivate::workerThread):
* wtf/ParallelJobsGeneric.h:
* wtf/ParkingLot.cpp:
(WTF::ParkingLot::parkConditionally):
* wtf/ParkingLot.h:
(WTF::ParkingLot::compareAndPark):
* wtf/ThreadingPthreads.cpp:
(WTF::initializeThreading):
* wtf/ThreadingWin.cpp:
(WTF::initializeThreading):
* wtf/dtoa.cpp:
(WTF::pow5mult):
* wtf/dtoa.h:
Tools:
* DumpRenderTree/JavaScriptThreading.cpp:
(javaScriptThreadsMutex):
(runJavaScriptThread):
(startJavaScriptThreads):
(stopJavaScriptThreads):
* TestWebKitAPI/Tests/WTF/Condition.cpp: Fixed a bug in the test that I found from turning the test into a benchmark.
* TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
(TestWebKitAPI::TEST):
* TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
(TestWebKitAPI::TEST):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFbenchmarksLockSpeedTestcpp">trunk/Source/WTF/benchmarks/LockSpeedTest.cpp</a></li>
<li><a href="#trunkSourceWTFwtfConditionh">trunk/Source/WTF/wtf/Condition.h</a></li>
<li><a href="#trunkSourceWTFwtfMessageQueueh">trunk/Source/WTF/wtf/MessageQueue.h</a></li>
<li><a href="#trunkSourceWTFwtfParallelJobsGenericcpp">trunk/Source/WTF/wtf/ParallelJobsGeneric.cpp</a></li>
<li><a href="#trunkSourceWTFwtfParallelJobsGenerich">trunk/Source/WTF/wtf/ParallelJobsGeneric.h</a></li>
<li><a href="#trunkSourceWTFwtfParkingLotcpp">trunk/Source/WTF/wtf/ParkingLot.cpp</a></li>
<li><a href="#trunkSourceWTFwtfParkingLoth">trunk/Source/WTF/wtf/ParkingLot.h</a></li>
<li><a href="#trunkSourceWTFwtfThreadingPthreadscpp">trunk/Source/WTF/wtf/ThreadingPthreads.cpp</a></li>
<li><a href="#trunkSourceWTFwtfThreadingWincpp">trunk/Source/WTF/wtf/ThreadingWin.cpp</a></li>
<li><a href="#trunkSourceWTFwtfdtoacpp">trunk/Source/WTF/wtf/dtoa.cpp</a></li>
<li><a href="#trunkSourceWTFwtfdtoah">trunk/Source/WTF/wtf/dtoa.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAsyncAudioDecodercpp">trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAsyncAudioDecoderh">trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioContexth">trunk/Source/WebCore/Modules/webaudio/AudioContext.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioMediaStreamAudioSourcecpp">trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioMediaStreamAudioSourceh">trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabasecpp">trunk/Source/WebCore/Modules/webdatabase/Database.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseh">trunk/Source/WebCore/Modules/webdatabase/Database.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTaskcpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTaskh">trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseThreadcpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseThreadh">trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTrackercpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTrackerh">trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseOriginLockh">trunk/Source/WebCore/Modules/webdatabase/OriginLock.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseSQLCallbackWrapperh">trunk/Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseSQLTransactionBackendcpp">trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseSQLTransactionBackendh">trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsWorkerScriptControllercpp">trunk/Source/WebCore/bindings/js/WorkerScriptController.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsWorkerScriptControllerh">trunk/Source/WebCore/bindings/js/WorkerScriptController.h</a></li>
<li><a href="#trunkSourceWebCoredomdefaultPlatformMessagePortChannelcpp">trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.cpp</a></li>
<li><a href="#trunkSourceWebCoredomdefaultPlatformMessagePortChannelh">trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.h</a></li>
<li><a href="#trunkSourceWebCoreloadericonIconDatabasecpp">trunk/Source/WebCore/loader/icon/IconDatabase.cpp</a></li>
<li><a href="#trunkSourceWebCoreloadericonIconDatabaseh">trunk/Source/WebCore/loader/icon/IconDatabase.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreecpp">trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingTreeh">trunk/Source/WebCore/page/scrolling/ScrollingTree.h</a></li>
<li><a href="#trunkSourceWebCoreplatformMemoryPressureHandlerh">trunk/Source/WebCore/platform/MemoryPressureHandler.h</a></li>
<li><a href="#trunkSourceWebCoreplatformaudioHRTFDatabaseLoadercpp">trunk/Source/WebCore/platform/audio/HRTFDatabaseLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformaudioHRTFDatabaseLoaderh">trunk/Source/WebCore/platform/audio/HRTFDatabaseLoader.h</a></li>
<li><a href="#trunkSourceWebCoreplatformcocoaMemoryPressureHandlerCocoamm">trunk/Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsDisplayRefreshMonitorcpp">trunk/Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsDisplayRefreshMonitorh">trunk/Source/WebCore/platform/graphics/DisplayRefreshMonitor.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationMediaPlayerPrivateAVFoundationcpp">trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationMediaPlayerPrivateAVFoundationh">trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsavfoundationcfMediaPlayerPrivateAVFoundationCFcpp">trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsgstreamerInbandTextTrackPrivateGStreamercpp">trunk/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsgstreamerInbandTextTrackPrivateGStreamerh">trunk/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsgstreamerTrackPrivateBaseGStreamercpp">trunk/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsgstreamerTrackPrivateBaseGStreamerh">trunk/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsmacDisplayRefreshMonitorMaccpp">trunk/Source/WebCore/platform/graphics/mac/DisplayRefreshMonitorMac.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicswinMediaPlayerPrivateMediaFoundationcpp">trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicswinMediaPlayerPrivateMediaFoundationh">trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosLegacyTileCacheh">trunk/Source/WebCore/platform/ios/LegacyTileCache.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosLegacyTileCachemm">trunk/Source/WebCore/platform/ios/LegacyTileCache.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformiosLegacyTileLayerPoolh">trunk/Source/WebCore/platform/ios/LegacyTileLayerPool.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosLegacyTileLayerPoolmm">trunk/Source/WebCore/platform/ios/LegacyTileLayerPool.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcurlCurlDownloadcpp">trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcurlCurlDownloadh">trunk/Source/WebCore/platform/network/curl/CurlDownload.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcurlResourceHandleManagercpp">trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkiosQuickLookmm">trunk/Source/WebCore/platform/network/ios/QuickLook.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformsqlSQLiteDatabasecpp">trunk/Source/WebCore/platform/sql/SQLiteDatabase.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformsqlSQLiteDatabaseh">trunk/Source/WebCore/platform/sql/SQLiteDatabase.h</a></li>
<li><a href="#trunkSourceWebCoreplatformsqlSQLiteStatementcpp">trunk/Source/WebCore/platform/sql/SQLiteStatement.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerThreadcpp">trunk/Source/WebCore/workers/WorkerThread.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerThreadh">trunk/Source/WebCore/workers/WorkerThread.h</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitStorageStorageAreaSynccpp">trunk/Source/WebKit/Storage/StorageAreaSync.cpp</a></li>
<li><a href="#trunkSourceWebKitStorageStorageAreaSynch">trunk/Source/WebKit/Storage/StorageAreaSync.h</a></li>
<li><a href="#trunkSourceWebKitStorageStorageTrackercpp">trunk/Source/WebKit/Storage/StorageTracker.cpp</a></li>
<li><a href="#trunkSourceWebKitStorageStorageTrackerh">trunk/Source/WebKit/Storage/StorageTracker.h</a></li>
<li><a href="#trunkSourceWebKitiosChangeLog">trunk/Source/WebKit/ios/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitiosWebCoreSupportWebFixedPositionContentmm">trunk/Source/WebKit/ios/WebCoreSupport/WebFixedPositionContent.mm</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacStorageWebDatabaseManagermm">trunk/Source/WebKit/mac/Storage/WebDatabaseManager.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewmm">trunk/Source/WebKit/mac/WebView/WebView.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewDatah">trunk/Source/WebKit/mac/WebView/WebViewData.h</a></li>
<li><a href="#trunkSourceWebKitwinChangeLog">trunk/Source/WebKit/win/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitwinPluginsPluginMainThreadSchedulercpp">trunk/Source/WebKit/win/Plugins/PluginMainThreadScheduler.cpp</a></li>
<li><a href="#trunkSourceWebKitwinPluginsPluginMainThreadSchedulerh">trunk/Source/WebKit/win/Plugins/PluginMainThreadScheduler.h</a></li>
<li><a href="#trunkSourceWebKitwinWebIconDatabasecpp">trunk/Source/WebKit/win/WebIconDatabase.cpp</a></li>
<li><a href="#trunkSourceWebKitwinWebIconDatabaseh">trunk/Source/WebKit/win/WebIconDatabase.h</a></li>
<li><a href="#trunkSourceWebKitwinWebLocalizableStringscpp">trunk/Source/WebKit/win/WebLocalizableStrings.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessDatabaseProcesscpp">trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessDatabaseProcessh">trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessIndexedDBUniqueIDBDatabasecpp">trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessIndexedDBUniqueIDBDatabaseh">trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCConnectioncpp">trunk/Source/WebKit2/Platform/IPC/Connection.cpp</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCConnectionh">trunk/Source/WebKit2/Platform/IPC/Connection.h</a></li>
<li><a href="#trunkSourceWebKit2SharedCoordinatedGraphicsCoordinatedGraphicsScenecpp">trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedCoordinatedGraphicsCoordinatedGraphicsSceneh">trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h</a></li>
<li><a href="#trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorThreadedCompositorcpp">trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorThreadedCompositorh">trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h</a></li>
<li><a href="#trunkSourceWebKit2SharedNetworkCustomProtocolsCocoaCustomProtocolManagerCocoamm">trunk/Source/WebKit2/Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2SharedNetworkCustomProtocolsCustomProtocolManagerh">trunk/Source/WebKit2/Shared/Network/CustomProtocols/CustomProtocolManager.h</a></li>
<li><a href="#trunkSourceWebKit2SharedlinuxSeccompFiltersSeccompBrokercpp">trunk/Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessPluginsPluginProcessConnectionManagercpp">trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessPluginsPluginProcessConnectionManagerh">trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageEventDispatchercpp">trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageEventDispatcherh">trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcesssoupWebKitSoupRequestInputStreamcpp">trunk/Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsDumpRenderTreeJavaScriptThreadingcpp">trunk/Tools/DumpRenderTree/JavaScriptThreading.cpp</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWTFConditioncpp">trunk/Tools/TestWebKitAPI/Tests/WTF/Condition.cpp</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWTFWorkQueuecpp">trunk/Tools/TestWebKitAPI/Tests/WTF/WorkQueue.cpp</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWTFglibWorkQueueGLibcpp">trunk/Tools/TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWTFbenchmarksConditionSpeedTestcpp">trunk/Source/WTF/benchmarks/ConditionSpeedTest.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/ChangeLog        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,3 +1,77 @@
</span><ins>+2015-08-17 Filip Pizlo <fpizlo@apple.com>
+
+ Replace all remaining uses of WTF::Mutex with WTF::Lock
+ https://bugs.webkit.org/show_bug.cgi?id=148089
+
+ Reviewed by Geoffrey Garen.
+
+ This also beefs up and rationalizes the Condition API, so that it can deal with units of time
+ other than just steady_clock. This makes it easier to port ThreadCondition and
+ std::condition_variable code over to Condition. This patch does not take a position on what
+ kind of time is best; from reading a lot of the uses in WebCore, it seems like our use of
+ double to measure seconds is often nicer than the many different classes in std::chrono.
+
+ Also added a Condition speed test, to make sure that all of this is a good idea. And indeed it
+ is. The 1-producer/1-consumer scenario with a 100-element queue runs 36x faster using
+ Lock/Condition than Mutex/ThreadCondition when you use the notifyOne()-per-enqueue style. It
+ runs 58x faster with Lock/Condition when you use the notifyAll()-at-boundary style. Note that
+ I have a bug open for making the notifyOne()-per-enqueue style even faster:
+ https://bugs.webkit.org/show_bug.cgi?id=148090. Also, the 10-consumer/10-producer scenario with
+ a 100-element queue runs 20x faster with Lock/Condition for notifyOne()-per-enqueue and 30x
+ faster with notifyAll()-at-boundary. The only way to tweak the test to get
+ Mutex/ThreadCondition to win is to have one producer, one consumer, a 1-element queue, and use
+ the notifyOne()-per-enqueue style. In that case, one of the two threads is going to be waiting
+ most of the time and the test basically measures wake-up latency and nothing else. Because
+ Condition::wait() does a little bit more work than ThreadCondition::wait(),
+ Mutex/ThreadCondition end up running 3% faster in this test case. But if you vary any of the
+ parameters of the test, Mutex/ThreadCondition ends up losing - all it takes is more threads or
+ a queue size of 5 or more. To my knowledge, we never do producer/consumer with a queue bounded
+ to one element precisely because that approach is the least efficient regardless of locking
+ algorithm. For example, neither WTF::MessageQueue nor DFG::Worklist have any bounds on their
+ queue size. So, it seems that replacing all uses of system mutexes and condition variables with
+ our own thing is a great idea.
+
+ * benchmarks/LockSpeedTest.cpp:
+ * benchmarks/ConditionSpeedTest.cpp: Added.
+ * wtf/Condition.h:
+ (WTF::Condition::Condition):
+ (WTF::Condition::waitUntil):
+ (WTF::Condition::waitFor):
+ (WTF::Condition::wait):
+ (WTF::Condition::waitUntilWallClockSeconds):
+ (WTF::Condition::waitUntilMonotonicClockSeconds):
+ (WTF::Condition::notifyOne):
+ (WTF::Condition::notifyAll):
+ (WTF::Condition::waitForSecondsImpl):
+ (WTF::Condition::waitForImpl):
+ (WTF::Condition::absoluteFromRelative):
+ * wtf/MessageQueue.h:
+ (WTF::MessageQueue::infiniteTime):
+ (WTF::MessageQueue<DataType>::append):
+ (WTF::MessageQueue<DataType>::appendAndKill):
+ (WTF::MessageQueue<DataType>::appendAndCheckEmpty):
+ (WTF::MessageQueue<DataType>::prepend):
+ (WTF::MessageQueue<DataType>::removeIf):
+ (WTF::MessageQueue<DataType>::isEmpty):
+ (WTF::MessageQueue<DataType>::kill):
+ (WTF::MessageQueue<DataType>::killed):
+ * wtf/ParallelJobsGeneric.cpp:
+ (WTF::ParallelEnvironment::ThreadPrivate::execute):
+ (WTF::ParallelEnvironment::ThreadPrivate::waitForFinish):
+ (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
+ * wtf/ParallelJobsGeneric.h:
+ * wtf/ParkingLot.cpp:
+ (WTF::ParkingLot::parkConditionally):
+ * wtf/ParkingLot.h:
+ (WTF::ParkingLot::compareAndPark):
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::initializeThreading):
+ * wtf/ThreadingWin.cpp:
+ (WTF::initializeThreading):
+ * wtf/dtoa.cpp:
+ (WTF::pow5mult):
+ * wtf/dtoa.h:
+
</ins><span class="cx"> 2015-08-17 Alex Christensen <achristensen@webkit.org>
</span><span class="cx">
</span><span class="cx"> Build Debug Suffix on Windows with CMake
</span></span></pre></div>
<a id="trunkSourceWTFbenchmarksConditionSpeedTestcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WTF/benchmarks/ConditionSpeedTest.cpp (0 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/benchmarks/ConditionSpeedTest.cpp         (rev 0)
+++ trunk/Source/WTF/benchmarks/ConditionSpeedTest.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -0,0 +1,245 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// On Mac, you can build this like so:
+// clang++ -o ConditionSpeedTest Source/WTF/benchmarks/ConditionSpeedTest.cpp -O3 -W -ISource/WTF -LWebKitBuild/Release -lWTF -framework Foundation -licucore -std=c++11
+
+#include "config.h"
+
+#include <mutex>
+#include <thread>
+#include <unistd.h>
+#include <wtf/Condition.h>
+#include <wtf/CurrentTime.h>
+#include <wtf/DataLog.h>
+#include <wtf/Deque.h>
+#include <wtf/Lock.h>
+#include <wtf/StdLibExtras.h>
+#include <wtf/StringPrintStream.h>
+#include <wtf/Threading.h>
+#include <wtf/ThreadingPrimitives.h>
+#include <wtf/Vector.h>
+
+namespace {
+
+const bool verbose = false;
+
+unsigned numProducers;
+unsigned numConsumers;
+unsigned maxQueueSize;
+unsigned numMessagesPerProducer;
+
+NO_RETURN void usage()
+{
+ printf("Usage: ConditionSpeedTest lock|mutex|all <num producers> <num consumers> <max queue size> <num messages per producer>\n");
+ exit(1);
+}
+
+template<typename Functor, typename ConditionType, typename LockType>
+void wait(ConditionType& condition, LockType& lock, const Functor& predicate)
+{
+ while (!predicate())
+ condition.wait(lock);
+}
+
+template<typename LockType, typename ConditionType, typename NotifyFunctor, typename NotifyAllFunctor>
+void runTest(
+ unsigned numProducers,
+ unsigned numConsumers,
+ unsigned maxQueueSize,
+ unsigned numMessagesPerProducer,
+ const NotifyFunctor& notify,
+ const NotifyAllFunctor& notifyAll)
+{
+ Deque<unsigned> queue;
+ bool shouldContinue = true;
+ LockType lock;
+ ConditionType emptyCondition;
+ ConditionType fullCondition;
+
+ Vector<ThreadIdentifier> consumerThreads;
+ Vector<ThreadIdentifier> producerThreads;
+
+ Vector<unsigned> received;
+ LockType receivedLock;
+
+ for (unsigned i = numConsumers; i--;) {
+ ThreadIdentifier threadIdentifier = createThread(
+ "Consumer thread",
+ [&] () {
+ for (;;) {
+ unsigned result;
+ unsigned mustNotify = false;
+ {
+ std::unique_lock<LockType> locker(lock);
+ wait(
+ emptyCondition, lock,
+ [&] () {
+ if (verbose)
+ dataLog(toString(currentThread(), ": Checking consumption predicate with shouldContinue = ", shouldContinue, ", queue.size() == ", queue.size(), "\n"));
+ return !shouldContinue || !queue.isEmpty();
+ });
+ if (!shouldContinue && queue.isEmpty())
+ return;
+ mustNotify = queue.size() == maxQueueSize;
+ result = queue.takeFirst();
+ }
+ notify(fullCondition, mustNotify);
+
+ {
+ std::lock_guard<LockType> locker(receivedLock);
+ received.append(result);
+ }
+ }
+ });
+ consumerThreads.append(threadIdentifier);
+ }
+
+ for (unsigned i = numProducers; i--;) {
+ ThreadIdentifier threadIdentifier = createThread(
+ "Producer Thread",
+ [&] () {
+ for (unsigned i = 0; i < numMessagesPerProducer; ++i) {
+ bool mustNotify = false;
+ {
+ std::unique_lock<LockType> locker(lock);
+ wait(
+ fullCondition, lock,
+ [&] () {
+ if (verbose)
+ dataLog(toString(currentThread(), ": Checking production predicate with shouldContinue = ", shouldContinue, ", queue.size() == ", queue.size(), "\n"));
+ return queue.size() < maxQueueSize;
+ });
+ mustNotify = queue.isEmpty();
+ queue.append(i);
+ }
+ notify(emptyCondition, mustNotify);
+ }
+ });
+ producerThreads.append(threadIdentifier);
+ }
+
+ for (ThreadIdentifier threadIdentifier : producerThreads)
+ waitForThreadCompletion(threadIdentifier);
+
+ {
+ std::lock_guard<LockType> locker(lock);
+ shouldContinue = false;
+ }
+ notifyAll(emptyCondition);
+
+ for (ThreadIdentifier threadIdentifier : consumerThreads)
+ waitForThreadCompletion(threadIdentifier);
+
+ RELEASE_ASSERT(numProducers * numMessagesPerProducer == received.size());
+ std::sort(received.begin(), received.end());
+ for (unsigned messageIndex = 0; messageIndex < numMessagesPerProducer; ++messageIndex) {
+ for (unsigned producerIndex = 0; producerIndex < numProducers; ++producerIndex)
+ RELEASE_ASSERT(messageIndex == received[messageIndex * numProducers + producerIndex]);
+ }
+}
+
+template<typename LockType, typename ConditionType, typename NotifyFunctor, typename NotifyAllFunctor>
+void runBenchmark(
+ const char* name,
+ const NotifyFunctor& notify,
+ const NotifyAllFunctor& notifyAll)
+{
+ double before = monotonicallyIncreasingTimeMS();
+
+ runTest<LockType, ConditionType>(
+ numProducers,
+ numConsumers,
+ maxQueueSize,
+ numMessagesPerProducer,
+ notify,
+ notifyAll);
+
+ double after = monotonicallyIncreasingTimeMS();
+
+ printf("%s: %.3lf ms.\n", name, after - before);
+}
+
+} // anonymous namespace
+
+int main(int argc, char** argv)
+{
+ WTF::initializeThreading();
+
+ if (argc != 6
+ || sscanf(argv[2], "%u", &numProducers) != 1
+ || sscanf(argv[3], "%u", &numConsumers) != 1
+ || sscanf(argv[4], "%u", &maxQueueSize) != 1
+ || sscanf(argv[5], "%u", &numMessagesPerProducer) != 1)
+ usage();
+
+ bool didRun = false;
+ if (!strcmp(argv[1], "lock") || !strcmp(argv[1], "all")) {
+ runBenchmark<Lock, Condition>(
+ "WTF Lock NotifyOne",
+ [&] (Condition& condition, bool mustNotify) {
+ condition.notifyOne();
+ },
+ [&] (Condition& condition) {
+ condition.notifyAll();
+ });
+ runBenchmark<Lock, Condition>(
+ "WTF Lock NotifyAll",
+ [&] (Condition& condition, bool mustNotify) {
+ if (mustNotify)
+ condition.notifyAll();
+ },
+ [&] (Condition& condition) {
+ condition.notifyAll();
+ });
+ didRun = true;
+ }
+ if (!strcmp(argv[1], "mutex") || !strcmp(argv[1], "all")) {
+ runBenchmark<Mutex, ThreadCondition>(
+ "Platform Mutex NotifyOne",
+ [&] (ThreadCondition& condition, bool mustNotify) {
+ condition.signal();
+ },
+ [&] (ThreadCondition& condition) {
+ condition.broadcast();
+ });
+ runBenchmark<Mutex, ThreadCondition>(
+ "Platform Mutex NotifyAll",
+ [&] (ThreadCondition& condition, bool mustNotify) {
+ if (mustNotify)
+ condition.broadcast();
+ },
+ [&] (ThreadCondition& condition) {
+ condition.broadcast();
+ });
+ didRun = true;
+ }
+
+ if (!didRun)
+ usage();
+
+ return 0;
+}
+
</ins></span></pre></div>
<a id="trunkSourceWTFbenchmarksLockSpeedTestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/benchmarks/LockSpeedTest.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/benchmarks/LockSpeedTest.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/benchmarks/LockSpeedTest.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -23,6 +23,9 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><ins>+// On Mac, you can build this like so:
+// clang++ -o LockSpeedTest Source/WTF/benchmarks/LockSpeedTest.cpp -O3 -W -ISource/WTF -LWebKitBuild/Release -lWTF -framework Foundation -licucore -std=c++11
+
</ins><span class="cx"> #include "config.h"
</span><span class="cx">
</span><span class="cx"> #include <unistd.h>
</span></span></pre></div>
<a id="trunkSourceWTFwtfConditionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Condition.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Condition.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/Condition.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -29,26 +29,46 @@
</span><span class="cx"> #include <chrono>
</span><span class="cx"> #include <functional>
</span><span class="cx"> #include <mutex>
</span><ins>+#include <wtf/CurrentTime.h>
</ins><span class="cx"> #include <wtf/ParkingLot.h>
</span><span class="cx">
</span><span class="cx"> namespace WTF {
</span><span class="cx">
</span><span class="cx"> class Condition {
</span><span class="cx"> public:
</span><ins>+ typedef ParkingLot::Clock Clock;
+
</ins><span class="cx"> Condition() { }
</span><span class="cx">
</span><span class="cx"> // Wait on a parking queue while releasing the given lock. It will unlock the lock just before
</span><span class="cx"> // parking, and relock it upon wakeup. Returns true if we woke up due to some call to
</span><del>- // notifyOne() or notifyAll(). Returns false if we woke up due to a timeout.
</del><ins>+ // notifyOne() or notifyAll(). Returns false if we woke up due to a timeout. Note that this form
+ // of waitUntil() has some quirks:
+ //
+ // No spurious wake-up: in order for this to return before the timeout, some notifyOne() or
+ // notifyAll() call must have happened. No scenario other than timeout or notify can lead to this
+ // method returning. This means, for example, that you can't use pthread cancelation or signals to
+ // cause early return.
+ //
+ // Past timeout: it's possible for waitUntil() to be called with a timeout in the past. In that
+ // case, waitUntil() will still release the lock and reacquire it. waitUntil() will always return
+ // false in that case. This is subtly different from some pthread_cond_timedwait() implementations,
+ // which may not release the lock for past timeout. But, this behavior is consistent with OpenGroup
+ // documentation for timedwait().
</ins><span class="cx"> template<typename LockType>
</span><del>- bool waitUntil(
- LockType& lock, std::chrono::steady_clock::time_point timeout)
</del><ins>+ bool waitUntil(LockType& lock, Clock::time_point timeout)
</ins><span class="cx"> {
</span><del>- bool result = ParkingLot::parkConditionally(
- &m_dummy,
- [] () -> bool { return true; },
- [&lock] () { lock.unlock(); },
- timeout);
</del><ins>+ bool result;
+ if (timeout < Clock::now()) {
+ lock.unlock();
+ result = false;
+ } else {
+ result = ParkingLot::parkConditionally(
+ &m_dummy,
+ [] () -> bool { return true; },
+ [&lock] () { lock.unlock(); },
+ timeout);
+ }
</ins><span class="cx"> lock.lock();
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="lines">@@ -56,8 +76,7 @@
</span><span class="cx"> // Wait until the given predicate is satisfied. Returns true if it is satisfied in the end.
</span><span class="cx"> // May return early due to timeout.
</span><span class="cx"> template<typename LockType, typename Functor>
</span><del>- bool waitUntil(
- LockType& lock, std::chrono::steady_clock::time_point timeout, const Functor& predicate)
</del><ins>+ bool waitUntil(LockType& lock, Clock::time_point timeout, const Functor& predicate)
</ins><span class="cx"> {
</span><span class="cx"> while (!predicate()) {
</span><span class="cx"> if (!waitUntil(lock, timeout))
</span><span class="lines">@@ -72,17 +91,13 @@
</span><span class="cx"> bool waitFor(
</span><span class="cx"> LockType& lock, const DurationType& relativeTimeout, const Functor& predicate)
</span><span class="cx"> {
</span><del>- std::chrono::steady_clock::time_point absoluteTimeout =
- std::chrono::steady_clock::now() +
- std::chrono::duration_cast<std::chrono::steady_clock::duration>(relativeTimeout);
-
- return waitUntil(lock, absoluteTimeout, predicate);
</del><ins>+ return waitUntil(lock, absoluteFromRelative(relativeTimeout), predicate);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename LockType>
</span><span class="cx"> void wait(LockType& lock)
</span><span class="cx"> {
</span><del>- waitUntil(lock, std::chrono::steady_clock::time_point::max());
</del><ins>+ waitUntil(lock, Clock::time_point::max());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename LockType, typename Functor>
</span><span class="lines">@@ -92,6 +107,32 @@
</span><span class="cx"> wait(lock);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ template<typename LockType, typename TimeType>
+ bool waitUntil(LockType& lock, const TimeType& timeout)
+ {
+ if (timeout == TimeType::max()) {
+ wait(lock);
+ return true;
+ }
+ return waitForImpl(lock, timeout - TimeType::clock::now());
+ }
+
+ template<typename LockType>
+ bool waitUntilWallClockSeconds(LockType& lock, double absoluteTimeoutSeconds)
+ {
+ return waitForSecondsImpl(lock, absoluteTimeoutSeconds - currentTime());
+ }
+
+ template<typename LockType>
+ bool waitUntilMonotonicClockSeconds(LockType& lock, double absoluteTimeoutSeconds)
+ {
+ return waitForSecondsImpl(lock, absoluteTimeoutSeconds - monotonicallyIncreasingTime());
+ }
+
+ // FIXME: We could replace the dummy byte with a boolean to tell us if there is anyone waiting
+ // right now. This could be used to implement a fast path for notifyOne() and notifyAll().
+ // https://bugs.webkit.org/show_bug.cgi?id=148090
+
</ins><span class="cx"> void notifyOne()
</span><span class="cx"> {
</span><span class="cx"> ParkingLot::unparkOne(&m_dummy);
</span><span class="lines">@@ -103,7 +144,56 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> private:
</span><ins>+ template<typename LockType>
+ bool waitForSecondsImpl(LockType& lock, double relativeTimeoutSeconds)
+ {
+ double relativeTimeoutNanoseconds = relativeTimeoutSeconds * (1000.0 * 1000.0 * 1000.0);
+
+ if (!(relativeTimeoutNanoseconds > 0)) {
+ // This handles insta-timeouts as well as NaN.
+ lock.unlock();
+ lock.lock();
+ return false;
+ }
+
+ if (relativeTimeoutNanoseconds > static_cast<double>(std::numeric_limits<int64_t>::max())) {
+ // If the timeout in nanoseconds cannot be expressed using a 64-bit integer, then we
+ // might as well wait forever.
+ wait(lock);
+ return true;
+ }
+
+ auto relativeTimeout =
+ std::chrono::nanoseconds(static_cast<int64_t>(relativeTimeoutNanoseconds));
+
+ return waitForImpl(lock, relativeTimeout);
+ }
</ins><span class="cx">
</span><ins>+ template<typename LockType, typename DurationType>
+ bool waitForImpl(LockType& lock, const DurationType& relativeTimeout)
+ {
+ return waitUntil(lock, absoluteFromRelative(relativeTimeout));
+ }
+
+ template<typename DurationType>
+ Clock::time_point absoluteFromRelative(const DurationType& relativeTimeout)
+ {
+ if (relativeTimeout < DurationType::zero())
+ return Clock::time_point::min();
+
+ if (relativeTimeout > Clock::duration::max()) {
+ // This is highly unlikely. But if it happens, we want to not do anything dumb. Sleeping
+ // without a timeout seems sensible when the timeout duration is greater than what can be
+ // expressed using steady_clock.
+ return Clock::time_point::max();
+ }
+
+ Clock::duration myRelativeTimeout =
+ std::chrono::duration_cast<Clock::duration>(relativeTimeout);
+
+ return Clock::now() + myRelativeTimeout;
+ }
+
</ins><span class="cx"> uint8_t m_dummy;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWTFwtfMessageQueueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/MessageQueue.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/MessageQueue.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/MessageQueue.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> * Copyright (C) 2009 Google Inc. All rights reserved.
</span><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -32,7 +32,9 @@
</span><span class="cx">
</span><span class="cx"> #include <limits>
</span><span class="cx"> #include <wtf/Assertions.h>
</span><ins>+#include <wtf/Condition.h>
</ins><span class="cx"> #include <wtf/Deque.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/Noncopyable.h>
</span><span class="cx"> #include <wtf/Threading.h>
</span><span class="cx">
</span><span class="lines">@@ -77,8 +79,8 @@
</span><span class="cx"> static double infiniteTime() { return std::numeric_limits<double>::max(); }
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- mutable Mutex m_mutex;
- ThreadCondition m_condition;
</del><ins>+ mutable Lock m_mutex;
+ Condition m_condition;
</ins><span class="cx"> Deque<std::unique_ptr<DataType>> m_queue;
</span><span class="cx"> bool m_killed;
</span><span class="cx"> };
</span><span class="lines">@@ -91,37 +93,37 @@
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline void MessageQueue<DataType>::append(std::unique_ptr<DataType> message)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> m_queue.append(WTF::move(message));
</span><del>- m_condition.signal();
</del><ins>+ m_condition.notifyOne();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline void MessageQueue<DataType>::appendAndKill(std::unique_ptr<DataType> message)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> m_queue.append(WTF::move(message));
</span><span class="cx"> m_killed = true;
</span><del>- m_condition.broadcast();
</del><ins>+ m_condition.notifyAll();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Returns true if the queue was empty before the item was added.
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline bool MessageQueue<DataType>::appendAndCheckEmpty(std::unique_ptr<DataType> message)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> bool wasEmpty = m_queue.isEmpty();
</span><span class="cx"> m_queue.append(WTF::move(message));
</span><del>- m_condition.signal();
</del><ins>+ m_condition.notifyOne();
</ins><span class="cx"> return wasEmpty;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline void MessageQueue<DataType>::prepend(std::unique_ptr<DataType> message)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> m_queue.prepend(WTF::move(message));
</span><del>- m_condition.signal();
</del><ins>+ m_condition.notifyOne();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename DataType>
</span><span class="lines">@@ -137,7 +139,7 @@
</span><span class="cx"> template<typename Predicate>
</span><span class="cx"> inline auto MessageQueue<DataType>::waitForMessageFilteredWithTimeout(MessageQueueWaitResult& result, Predicate&& predicate, double absoluteTime) -> std::unique_ptr<DataType>
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> bool timedOut = false;
</span><span class="cx">
</span><span class="cx"> auto found = m_queue.end();
</span><span class="lines">@@ -149,7 +151,7 @@
</span><span class="cx"> if (found != m_queue.end())
</span><span class="cx"> break;
</span><span class="cx">
</span><del>- timedOut = !m_condition.timedWait(m_mutex, absoluteTime);
</del><ins>+ timedOut = !m_condition.waitUntilWallClockSeconds(m_mutex, absoluteTime);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ASSERT(!timedOut || absoluteTime != infiniteTime());
</span><span class="lines">@@ -174,7 +176,7 @@
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline auto MessageQueue<DataType>::tryGetMessage() -> std::unique_ptr<DataType>
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> if (m_killed)
</span><span class="cx"> return nullptr;
</span><span class="cx"> if (m_queue.isEmpty())
</span><span class="lines">@@ -186,7 +188,7 @@
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline auto MessageQueue<DataType>::tryGetMessageIgnoringKilled() -> std::unique_ptr<DataType>
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> if (m_queue.isEmpty())
</span><span class="cx"> return nullptr;
</span><span class="cx">
</span><span class="lines">@@ -197,7 +199,7 @@
</span><span class="cx"> template<typename Predicate>
</span><span class="cx"> inline void MessageQueue<DataType>::removeIf(Predicate&& predicate)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> while (true) {
</span><span class="cx"> auto found = m_queue.findIf([&predicate](const std::unique_ptr<DataType>& ptr) -> bool {
</span><span class="cx"> ASSERT(ptr);
</span><span class="lines">@@ -214,7 +216,7 @@
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline bool MessageQueue<DataType>::isEmpty()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> if (m_killed)
</span><span class="cx"> return true;
</span><span class="cx"> return m_queue.isEmpty();
</span><span class="lines">@@ -223,15 +225,15 @@
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline void MessageQueue<DataType>::kill()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> m_killed = true;
</span><del>- m_condition.broadcast();
</del><ins>+ m_condition.notifyAll();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename DataType>
</span><span class="cx"> inline bool MessageQueue<DataType>::killed() const
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> return m_killed;
</span><span class="cx"> }
</span><span class="cx"> } // namespace WTF
</span></span></pre></div>
<a id="trunkSourceWTFwtfParallelJobsGenericcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/ParallelJobsGeneric.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/ParallelJobsGeneric.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/ParallelJobsGeneric.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -105,17 +105,17 @@
</span><span class="cx">
</span><span class="cx"> void ParallelEnvironment::ThreadPrivate::execute(ThreadFunction threadFunction, void* parameters)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx">
</span><span class="cx"> m_threadFunction = threadFunction;
</span><span class="cx"> m_parameters = parameters;
</span><span class="cx"> m_running = true;
</span><del>- m_threadCondition.signal();
</del><ins>+ m_threadCondition.notifyOne();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ParallelEnvironment::ThreadPrivate::waitForFinish()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx">
</span><span class="cx"> while (m_running)
</span><span class="cx"> m_threadCondition.wait(m_mutex);
</span><span class="lines">@@ -124,14 +124,14 @@
</span><span class="cx"> void ParallelEnvironment::ThreadPrivate::workerThread(void* threadData)
</span><span class="cx"> {
</span><span class="cx"> ThreadPrivate* sharedThread = reinterpret_cast<ThreadPrivate*>(threadData);
</span><del>- MutexLocker lock(sharedThread->m_mutex);
</del><ins>+ LockHolder lock(sharedThread->m_mutex);
</ins><span class="cx">
</span><span class="cx"> while (sharedThread->m_threadID) {
</span><span class="cx"> if (sharedThread->m_running) {
</span><span class="cx"> (*sharedThread->m_threadFunction)(sharedThread->m_parameters);
</span><span class="cx"> sharedThread->m_running = false;
</span><span class="cx"> sharedThread->m_parent = 0;
</span><del>- sharedThread->m_threadCondition.signal();
</del><ins>+ sharedThread->m_threadCondition.notifyOne();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> sharedThread->m_threadCondition.wait(sharedThread->m_mutex);
</span></span></pre></div>
<a id="trunkSourceWTFwtfParallelJobsGenerich"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/ParallelJobsGeneric.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/ParallelJobsGeneric.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/ParallelJobsGeneric.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -30,6 +30,8 @@
</span><span class="cx">
</span><span class="cx"> #if ENABLE(THREADING_GENERIC)
</span><span class="cx">
</span><ins>+#include <wtf/Condition.h>
+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/Threading.h>
</span><span class="cx">
</span><span class="lines">@@ -76,8 +78,8 @@
</span><span class="cx"> bool m_running;
</span><span class="cx"> ParallelEnvironment* m_parent;
</span><span class="cx">
</span><del>- mutable Mutex m_mutex;
- ThreadCondition m_threadCondition;
</del><ins>+ mutable Lock m_mutex;
+ Condition m_threadCondition;
</ins><span class="cx">
</span><span class="cx"> ThreadFunction m_threadFunction;
</span><span class="cx"> void* m_parameters;
</span></span></pre></div>
<a id="trunkSourceWTFwtfParkingLotcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/ParkingLot.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/ParkingLot.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/ParkingLot.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -511,7 +511,7 @@
</span><span class="cx"> const void* address,
</span><span class="cx"> std::function<bool()> validation,
</span><span class="cx"> std::function<void()> beforeSleep,
</span><del>- std::chrono::steady_clock::time_point timeout)
</del><ins>+ Clock::time_point timeout)
</ins><span class="cx"> {
</span><span class="cx"> if (verbose)
</span><span class="cx"> dataLog(toString(currentThread(), ": parking.\n"));
</span><span class="lines">@@ -539,11 +539,11 @@
</span><span class="cx"> bool didGetDequeued;
</span><span class="cx"> {
</span><span class="cx"> std::unique_lock<std::mutex> locker(me->parkingLock);
</span><del>- while (me->address && std::chrono::steady_clock::now() < timeout) {
</del><ins>+ while (me->address && Clock::now() < timeout) {
</ins><span class="cx"> // This is pretty funny. On Linux, if you wait until the max time, it immediately reports that you timed
</span><span class="cx"> // out. What's particularly bad about this is that it never releases the lock in that case. So, you loop
</span><span class="cx"> // forever without yielding to the thread that would wake you up.
</span><del>- if (timeout == std::chrono::steady_clock::time_point::max())
</del><ins>+ if (timeout == Clock::time_point::max())
</ins><span class="cx"> me->parkingCondition.wait(locker);
</span><span class="cx"> else
</span><span class="cx"> me->parkingCondition.wait_until(locker, timeout);
</span></span></pre></div>
<a id="trunkSourceWTFwtfParkingLoth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/ParkingLot.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/ParkingLot.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/ParkingLot.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx"> ParkingLot(const ParkingLot&) = delete;
</span><span class="cx">
</span><span class="cx"> public:
</span><ins>+ typedef std::chrono::steady_clock Clock;
+
</ins><span class="cx"> // Parks the thread in a queue associated with the given address, which cannot be null. The
</span><span class="cx"> // parking only succeeds if the validation function returns true while the queue lock is held.
</span><span class="cx"> // If validation returns false, it will unlock the internal parking queue and then it will
</span><span class="lines">@@ -53,7 +55,7 @@
</span><span class="cx"> const void* address,
</span><span class="cx"> std::function<bool()> validation,
</span><span class="cx"> std::function<void()> beforeSleep,
</span><del>- std::chrono::steady_clock::time_point timeout);
</del><ins>+ Clock::time_point timeout);
</ins><span class="cx">
</span><span class="cx"> // Simple version of parkConditionally() that covers the most common case: you want to park
</span><span class="cx"> // indefinitely so long as the value at the given address hasn't changed.
</span><span class="lines">@@ -67,7 +69,7 @@
</span><span class="cx"> return value == expected;
</span><span class="cx"> },
</span><span class="cx"> [] () { },
</span><del>- std::chrono::steady_clock::time_point::max());
</del><ins>+ Clock::time_point::max());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Unparks one thread from the queue associated with the given address, which cannot be null.
</span><span class="lines">@@ -103,7 +105,7 @@
</span><span class="cx"> // A1,T1 A2,T3 A1,T2 A2,T4
</span><span class="cx"> // A1,T1 A2,T3 A2,T4 A1,T2
</span><span class="cx"> //
</span><del>- // As well as many other possible interleaves that all have T1 before T2 and T3 before T4 but are
</del><ins>+ // As well as many other possible interleavings that all have T1 before T2 and T3 before T4 but are
</ins><span class="cx"> // otherwise unconstrained. This method is useful primarily for debugging. It's also used by unit
</span><span class="cx"> // tests.
</span><span class="cx"> WTF_EXPORT_PRIVATE static void forEach(std::function<void(ThreadIdentifier, const void*)>);
</span></span></pre></div>
<a id="trunkSourceWTFwtfThreadingPthreadscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/ThreadingPthreads.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/ThreadingPthreads.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/ThreadingPthreads.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -126,7 +126,6 @@
</span><span class="cx"> ThreadIdentifierData::initializeOnce();
</span><span class="cx"> StackStats::initialize();
</span><span class="cx"> wtfThreadData();
</span><del>- s_dtoaP5Mutex = new Mutex;
</del><span class="cx"> initializeDates();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWTFwtfThreadingWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/ThreadingWin.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/ThreadingWin.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/ThreadingWin.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -165,7 +165,6 @@
</span><span class="cx"> threadMapMutex();
</span><span class="cx"> initializeRandomNumberGenerator();
</span><span class="cx"> wtfThreadData();
</span><del>- s_dtoaP5Mutex = new Mutex;
</del><span class="cx"> initializeDates();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWTFwtfdtoacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/dtoa.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/dtoa.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/dtoa.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -3,7 +3,7 @@
</span><span class="cx"> * The author of this software is David M. Gay.
</span><span class="cx"> *
</span><span class="cx"> * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
</span><del>- * Copyright (C) 2002, 2005, 2006, 2007, 2008, 2010, 2012 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2002, 2005, 2006, 2007, 2008, 2010, 2012, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Permission to use, copy, modify, and distribute this software for any
</span><span class="cx"> * purpose without fee is hereby granted, provided that this entire notice
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include "dtoa.h"
</span><span class="cx">
</span><span class="cx"> #include <stdio.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/MathExtras.h>
</span><span class="cx"> #include <wtf/Threading.h>
</span><span class="cx"> #include <wtf/Vector.h>
</span><span class="lines">@@ -54,7 +55,7 @@
</span><span class="cx">
</span><span class="cx"> namespace WTF {
</span><span class="cx">
</span><del>-Mutex* s_dtoaP5Mutex;
</del><ins>+static StaticLock s_dtoaP5Mutex;
</ins><span class="cx">
</span><span class="cx"> typedef union {
</span><span class="cx"> double d;
</span><span class="lines">@@ -375,7 +376,7 @@
</span><span class="cx"> if (!(k >>= 2))
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- s_dtoaP5Mutex->lock();
</del><ins>+ s_dtoaP5Mutex.lock();
</ins><span class="cx"> P5Node* p5 = p5s;
</span><span class="cx">
</span><span class="cx"> if (!p5) {
</span><span class="lines">@@ -388,7 +389,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> int p5sCountLocal = p5sCount;
</span><del>- s_dtoaP5Mutex->unlock();
</del><ins>+ s_dtoaP5Mutex.unlock();
</ins><span class="cx"> int p5sUsed = 0;
</span><span class="cx">
</span><span class="cx"> for (;;) {
</span><span class="lines">@@ -399,7 +400,7 @@
</span><span class="cx"> break;
</span><span class="cx">
</span><span class="cx"> if (++p5sUsed == p5sCountLocal) {
</span><del>- s_dtoaP5Mutex->lock();
</del><ins>+ s_dtoaP5Mutex.lock();
</ins><span class="cx"> if (p5sUsed == p5sCount) {
</span><span class="cx"> ASSERT(!p5->next);
</span><span class="cx"> p5->next = new P5Node;
</span><span class="lines">@@ -410,7 +411,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> p5sCountLocal = p5sCount;
</span><del>- s_dtoaP5Mutex->unlock();
</del><ins>+ s_dtoaP5Mutex.unlock();
</ins><span class="cx"> }
</span><span class="cx"> p5 = p5->next;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWTFwtfdtoah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/dtoa.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/dtoa.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WTF/wtf/dtoa.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -28,10 +28,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WTF {
</span><span class="cx">
</span><del>-class Mutex;
-
-extern Mutex* s_dtoaP5Mutex;
-
</del><span class="cx"> typedef char DtoaBuffer[80];
</span><span class="cx">
</span><span class="cx"> WTF_EXPORT_PRIVATE void dtoa(DtoaBuffer result, double dd, bool& sign, int& exponent, unsigned& precision);
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/ChangeLog        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,3 +1,274 @@
</span><ins>+2015-08-17 Filip Pizlo <fpizlo@apple.com>
+
+ Replace all remaining uses of WTF::Mutex with WTF::Lock
+ https://bugs.webkit.org/show_bug.cgi?id=148089
+
+ Reviewed by Geoffrey Garen.
+
+ No new tests because no new behavior.
+
+ * Modules/webaudio/AsyncAudioDecoder.cpp:
+ (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
+ (WebCore::AsyncAudioDecoder::runLoop):
+ * Modules/webaudio/AsyncAudioDecoder.h:
+ * Modules/webaudio/AudioContext.h:
+ * Modules/webaudio/MediaStreamAudioSource.cpp:
+ (WebCore::MediaStreamAudioSource::addAudioConsumer):
+ (WebCore::MediaStreamAudioSource::removeAudioConsumer):
+ (WebCore::MediaStreamAudioSource::setAudioFormat):
+ (WebCore::MediaStreamAudioSource::consumeAudio):
+ * Modules/webaudio/MediaStreamAudioSource.h:
+ * Modules/webdatabase/Database.cpp:
+ (WebCore::Database::close):
+ (WebCore::Database::runTransaction):
+ (WebCore::Database::inProgressTransactionCompleted):
+ (WebCore::Database::hasPendingTransaction):
+ * Modules/webdatabase/Database.h:
+ * Modules/webdatabase/DatabaseTask.cpp:
+ (WebCore::DatabaseTaskSynchronizer::taskCompleted):
+ * Modules/webdatabase/DatabaseTask.h:
+ * Modules/webdatabase/DatabaseThread.cpp:
+ (WebCore::DatabaseThread::start):
+ (WebCore::DatabaseThread::databaseThread):
+ * Modules/webdatabase/DatabaseThread.h:
+ * Modules/webdatabase/DatabaseTracker.cpp:
+ (WebCore::DatabaseTracker::setDatabaseDirectoryPath):
+ (WebCore::DatabaseTracker::canEstablishDatabase):
+ (WebCore::DatabaseTracker::retryCanEstablishDatabase):
+ (WebCore::DatabaseTracker::hasEntryForOrigin):
+ (WebCore::DatabaseTracker::getMaxSizeForDatabase):
+ (WebCore::DatabaseTracker::closeAllDatabases):
+ (WebCore::DatabaseTracker::fullPathForDatabase):
+ (WebCore::DatabaseTracker::origins):
+ (WebCore::DatabaseTracker::databaseNamesForOrigin):
+ (WebCore::DatabaseTracker::detailsForNameAndOrigin):
+ (WebCore::DatabaseTracker::setDatabaseDetails):
+ (WebCore::DatabaseTracker::doneCreatingDatabase):
+ (WebCore::DatabaseTracker::addOpenDatabase):
+ (WebCore::DatabaseTracker::removeOpenDatabase):
+ (WebCore::DatabaseTracker::getOpenDatabases):
+ (WebCore::DatabaseTracker::originLockFor):
+ (WebCore::DatabaseTracker::quotaForOrigin):
+ (WebCore::DatabaseTracker::setQuota):
+ (WebCore::DatabaseTracker::deleteOrigin):
+ (WebCore::DatabaseTracker::deleteDatabase):
+ (WebCore::DatabaseTracker::deleteDatabaseFile):
+ (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
+ (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
+ (WebCore::DatabaseTracker::openDatabaseMutex):
+ (WebCore::DatabaseTracker::setClient):
+ (WebCore::notificationMutex):
+ (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
+ (WebCore::DatabaseTracker::notifyDatabasesChanged):
+ * Modules/webdatabase/DatabaseTracker.h:
+ * Modules/webdatabase/OriginLock.h:
+ * Modules/webdatabase/SQLCallbackWrapper.h:
+ (WebCore::SQLCallbackWrapper::clear):
+ (WebCore::SQLCallbackWrapper::unwrap):
+ (WebCore::SQLCallbackWrapper::hasCallback):
+ * Modules/webdatabase/SQLTransactionBackend.cpp:
+ (WebCore::SQLTransactionBackend::doCleanup):
+ (WebCore::SQLTransactionBackend::enqueueStatementBackend):
+ (WebCore::SQLTransactionBackend::getNextStatement):
+ * Modules/webdatabase/SQLTransactionBackend.h:
+ * bindings/js/WorkerScriptController.cpp:
+ (WebCore::WorkerScriptController::scheduleExecutionTermination):
+ (WebCore::WorkerScriptController::isExecutionTerminating):
+ * bindings/js/WorkerScriptController.h:
+ * dom/default/PlatformMessagePortChannel.cpp:
+ (WebCore::MessagePortChannel::postMessageToRemote):
+ (WebCore::MessagePortChannel::tryGetMessageFromRemote):
+ (WebCore::MessagePortChannel::isConnectedTo):
+ (WebCore::MessagePortChannel::hasPendingActivity):
+ (WebCore::MessagePortChannel::locallyEntangledPort):
+ (WebCore::PlatformMessagePortChannel::setRemotePort):
+ (WebCore::PlatformMessagePortChannel::entangledChannel):
+ (WebCore::PlatformMessagePortChannel::closeInternal):
+ * dom/default/PlatformMessagePortChannel.h:
+ * loader/icon/IconDatabase.cpp:
+ (WebCore::IconDatabase::removeAllIcons):
+ (WebCore::IconDatabase::synchronousIconForPageURL):
+ (WebCore::IconDatabase::synchronousNativeIconForPageURL):
+ (WebCore::IconDatabase::synchronousIconURLForPageURL):
+ (WebCore::IconDatabase::retainIconForPageURL):
+ (WebCore::IconDatabase::performRetainIconForPageURL):
+ (WebCore::IconDatabase::releaseIconForPageURL):
+ (WebCore::IconDatabase::performReleaseIconForPageURL):
+ (WebCore::IconDatabase::setIconDataForIconURL):
+ (WebCore::IconDatabase::setIconURLForPageURL):
+ (WebCore::IconDatabase::synchronousLoadDecisionForIconURL):
+ (WebCore::IconDatabase::synchronousIconDataKnownForIconURL):
+ (WebCore::IconDatabase::pageURLMappingCount):
+ (WebCore::IconDatabase::retainedPageURLCount):
+ (WebCore::IconDatabase::iconRecordCount):
+ (WebCore::IconDatabase::iconRecordCountWithData):
+ (WebCore::IconDatabase::wakeSyncThread):
+ (WebCore::IconDatabase::scheduleOrDeferSyncTimer):
+ (WebCore::IconDatabase::isOpenBesidesMainThreadCallbacks):
+ (WebCore::IconDatabase::databasePath):
+ (WebCore::IconDatabase::getOrCreatePageURLRecord):
+ (WebCore::IconDatabase::iconDatabaseSyncThread):
+ (WebCore::IconDatabase::performOpenInitialization):
+ (WebCore::IconDatabase::performURLImport):
+ (WebCore::IconDatabase::syncThreadMainLoop):
+ (WebCore::IconDatabase::performPendingRetainAndReleaseOperations):
+ (WebCore::IconDatabase::readFromDatabase):
+ (WebCore::IconDatabase::writeToDatabase):
+ (WebCore::IconDatabase::pruneUnretainedIcons):
+ (WebCore::IconDatabase::cleanupSyncThread):
+ * loader/icon/IconDatabase.h:
+ * page/scrolling/ScrollingTree.cpp:
+ (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
+ (WebCore::ScrollingTree::commitNewTreeState):
+ (WebCore::ScrollingTree::setMainFramePinState):
+ (WebCore::ScrollingTree::mainFrameScrollPosition):
+ (WebCore::ScrollingTree::setMainFrameScrollPosition):
+ (WebCore::ScrollingTree::isPointInNonFastScrollableRegion):
+ (WebCore::ScrollingTree::isRubberBandInProgress):
+ (WebCore::ScrollingTree::setMainFrameIsRubberBanding):
+ (WebCore::ScrollingTree::isScrollSnapInProgress):
+ (WebCore::ScrollingTree::setMainFrameIsScrollSnapping):
+ (WebCore::ScrollingTree::setCanRubberBandState):
+ (WebCore::ScrollingTree::rubberBandsAtLeft):
+ (WebCore::ScrollingTree::rubberBandsAtRight):
+ (WebCore::ScrollingTree::rubberBandsAtBottom):
+ (WebCore::ScrollingTree::rubberBandsAtTop):
+ (WebCore::ScrollingTree::setScrollPinningBehavior):
+ (WebCore::ScrollingTree::scrollPinningBehavior):
+ (WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
+ (WebCore::ScrollingTree::latchedNode):
+ (WebCore::ScrollingTree::setLatchedNode):
+ (WebCore::ScrollingTree::clearLatchedNode):
+ * page/scrolling/ScrollingTree.h:
+ * platform/MemoryPressureHandler.h:
+ * platform/audio/HRTFDatabaseLoader.cpp:
+ (WebCore::HRTFDatabaseLoader::loadAsynchronously):
+ (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
+ * platform/audio/HRTFDatabaseLoader.h:
+ * platform/cocoa/MemoryPressureHandlerCocoa.mm:
+ (WebCore::MemoryPressureHandler::setReceivedMemoryPressure):
+ (WebCore::MemoryPressureHandler::clearMemoryPressure):
+ (WebCore::MemoryPressureHandler::shouldWaitForMemoryClearMessage):
+ (WebCore::MemoryPressureHandler::respondToMemoryPressureIfNeeded):
+ * platform/graphics/DisplayRefreshMonitor.cpp:
+ (WebCore::DisplayRefreshMonitor::displayDidRefresh):
+ * platform/graphics/DisplayRefreshMonitor.h:
+ (WebCore::DisplayRefreshMonitor::setMonotonicAnimationStartTime):
+ (WebCore::DisplayRefreshMonitor::mutex):
+ * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
+ (WebCore::MediaPlayerPrivateAVFoundation::setDelayCallbacks):
+ (WebCore::MediaPlayerPrivateAVFoundation::clearMainThreadPendingFlag):
+ (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
+ * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
+ * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
+ (WebCore::AVFWrapper::callbackContext):
+ (WebCore::AVFWrapper::~AVFWrapper):
+ (WebCore::AVFWrapper::mapLock):
+ (WebCore::AVFWrapper::addToMap):
+ (WebCore::AVFWrapper::removeFromMap):
+ (WebCore::AVFWrapper::periodicTimeObserverCallback):
+ (WebCore::AVFWrapper::processNotification):
+ (WebCore::AVFWrapper::loadPlayableCompletionCallback):
+ (WebCore::AVFWrapper::loadMetadataCompletionCallback):
+ (WebCore::AVFWrapper::seekCompletedCallback):
+ (WebCore::AVFWrapper::processCue):
+ (WebCore::AVFWrapper::legibleOutputCallback):
+ (WebCore::AVFWrapper::processShouldWaitForLoadingOfResource):
+ (WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):
+ * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
+ (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
+ (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
+ * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
+ * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
+ (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
+ (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):
+ * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
+ * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
+ (WebCore::DisplayRefreshMonitorMac::requestRefreshCallback):
+ (WebCore::DisplayRefreshMonitorMac::displayLinkFired):
+ * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
+ (WebCore::MediaPlayerPrivateMediaFoundation::addListener):
+ (WebCore::MediaPlayerPrivateMediaFoundation::removeListener):
+ (WebCore::MediaPlayerPrivateMediaFoundation::notifyDeleted):
+ (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
+ (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
+ * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
+ * platform/ios/LegacyTileCache.h:
+ * platform/ios/LegacyTileCache.mm:
+ (WebCore::LegacyTileCache::setTilesOpaque):
+ (WebCore::LegacyTileCache::doLayoutTiles):
+ (WebCore::LegacyTileCache::setCurrentScale):
+ (WebCore::LegacyTileCache::commitScaleChange):
+ (WebCore::LegacyTileCache::layoutTilesNow):
+ (WebCore::LegacyTileCache::layoutTilesNowForRect):
+ (WebCore::LegacyTileCache::removeAllNonVisibleTiles):
+ (WebCore::LegacyTileCache::removeAllTiles):
+ (WebCore::LegacyTileCache::removeForegroundTiles):
+ (WebCore::LegacyTileCache::setContentReplacementImage):
+ (WebCore::LegacyTileCache::contentReplacementImage):
+ (WebCore::LegacyTileCache::tileCreationTimerFired):
+ (WebCore::LegacyTileCache::setNeedsDisplayInRect):
+ (WebCore::LegacyTileCache::updateTilingMode):
+ (WebCore::LegacyTileCache::setTilingMode):
+ (WebCore::LegacyTileCache::doPendingRepaints):
+ (WebCore::LegacyTileCache::flushSavedDisplayRects):
+ (WebCore::LegacyTileCache::prepareToDraw):
+ * platform/ios/LegacyTileLayerPool.h:
+ * platform/ios/LegacyTileLayerPool.mm:
+ (WebCore::LegacyTileLayerPool::addLayer):
+ (WebCore::LegacyTileLayerPool::takeLayerWithSize):
+ (WebCore::LegacyTileLayerPool::setCapacity):
+ (WebCore::LegacyTileLayerPool::prune):
+ (WebCore::LegacyTileLayerPool::drain):
+ * platform/network/curl/CurlDownload.cpp:
+ (WebCore::CurlDownloadManager::add):
+ (WebCore::CurlDownloadManager::remove):
+ (WebCore::CurlDownloadManager::getActiveDownloadCount):
+ (WebCore::CurlDownloadManager::getPendingDownloadCount):
+ (WebCore::CurlDownloadManager::stopThreadIfIdle):
+ (WebCore::CurlDownloadManager::updateHandleList):
+ (WebCore::CurlDownload::~CurlDownload):
+ (WebCore::CurlDownload::init):
+ (WebCore::CurlDownload::getTempPath):
+ (WebCore::CurlDownload::getUrl):
+ (WebCore::CurlDownload::getResponse):
+ (WebCore::CurlDownload::closeFile):
+ (WebCore::CurlDownload::didReceiveHeader):
+ (WebCore::CurlDownload::didReceiveData):
+ (WebCore::CurlDownload::didFail):
+ * platform/network/curl/CurlDownload.h:
+ * platform/network/curl/ResourceHandleManager.cpp:
+ (WebCore::cookieJarPath):
+ (WebCore::sharedResourceMutex):
+ (WebCore::curl_lock_callback):
+ (WebCore::curl_unlock_callback):
+ * platform/network/ios/QuickLook.mm:
+ (WebCore::QLDirectoryAttributes):
+ (qlPreviewConverterDictionaryMutex):
+ (WebCore::addQLPreviewConverterWithFileForURL):
+ (WebCore::qlPreviewConverterUTIForURL):
+ (WebCore::removeQLPreviewConverterForURL):
+ (WebCore::safeQLURLForDocumentURLAndResourceURL):
+ * platform/sql/SQLiteDatabase.cpp:
+ (WebCore::SQLiteDatabase::close):
+ (WebCore::SQLiteDatabase::maximumSize):
+ (WebCore::SQLiteDatabase::setMaximumSize):
+ (WebCore::SQLiteDatabase::pageSize):
+ (WebCore::SQLiteDatabase::freeSpaceSize):
+ (WebCore::SQLiteDatabase::totalSize):
+ (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
+ (WebCore::SQLiteDatabase::setAuthorizer):
+ * platform/sql/SQLiteDatabase.h:
+ (WebCore::SQLiteDatabase::databaseMutex):
+ * platform/sql/SQLiteStatement.cpp:
+ (WebCore::SQLiteStatement::prepare):
+ (WebCore::SQLiteStatement::step):
+ * workers/WorkerThread.cpp:
+ (WebCore::WorkerThread::start):
+ (WebCore::WorkerThread::workerThread):
+ (WebCore::WorkerThread::stop):
+ * workers/WorkerThread.h:
+
</ins><span class="cx"> 2015-08-18 Myles C. Maxfield <mmaxfield@apple.com>
</span><span class="cx">
</span><span class="cx"> [Cocoa] Honor the 'trak' table by opting in via text-rendering: optimizeLegibility
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAsyncAudioDecodercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> AsyncAudioDecoder::AsyncAudioDecoder()
</span><span class="cx"> {
</span><span class="cx"> // Start worker thread.
</span><del>- MutexLocker lock(m_threadCreationMutex);
</del><ins>+ LockHolder lock(m_threadCreationMutex);
</ins><span class="cx"> m_threadID = createThread(AsyncAudioDecoder::threadEntry, this, "Audio Decoder");
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx">
</span><span class="cx"> {
</span><span class="cx"> // Wait for until we have m_threadID established before starting the run loop.
</span><del>- MutexLocker lock(m_threadCreationMutex);
</del><ins>+ LockHolder lock(m_threadCreationMutex);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Keep running decoding tasks until we're killed.
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAsyncAudioDecoderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webaudio/AsyncAudioDecoder.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx"> void runLoop();
</span><span class="cx">
</span><span class="cx"> WTF::ThreadIdentifier m_threadID;
</span><del>- Mutex m_threadCreationMutex;
</del><ins>+ Lock m_threadCreationMutex;
</ins><span class="cx"> MessageQueue<DecodingTask> m_queue;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioContext.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -380,7 +380,7 @@
</span><span class="cx"> unsigned m_connectionCount { 0 };
</span><span class="cx">
</span><span class="cx"> // Graph locking.
</span><del>- Mutex m_contextGraphMutex;
</del><ins>+ Lock m_contextGraphMutex;
</ins><span class="cx"> volatile ThreadIdentifier m_audioThread { 0 };
</span><span class="cx"> volatile ThreadIdentifier m_graphOwnerThread; // if the lock is held then this is the thread which owns it, otherwise == UndefinedThreadIdentifier
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioMediaStreamAudioSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -63,13 +63,13 @@
</span><span class="cx">
</span><span class="cx"> void MediaStreamAudioSource::addAudioConsumer(PassRefPtr<AudioDestinationConsumer> consumer)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_audioConsumersLock);
</del><ins>+ LockHolder locker(m_audioConsumersLock);
</ins><span class="cx"> m_audioConsumers.append(consumer);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool MediaStreamAudioSource::removeAudioConsumer(AudioDestinationConsumer* consumer)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_audioConsumersLock);
</del><ins>+ LockHolder locker(m_audioConsumersLock);
</ins><span class="cx"> size_t pos = m_audioConsumers.find(consumer);
</span><span class="cx"> if (pos != notFound) {
</span><span class="cx"> m_audioConsumers.remove(pos);
</span><span class="lines">@@ -80,14 +80,14 @@
</span><span class="cx">
</span><span class="cx"> void MediaStreamAudioSource::setAudioFormat(size_t numberOfChannels, float sampleRate)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_audioConsumersLock);
</del><ins>+ LockHolder locker(m_audioConsumersLock);
</ins><span class="cx"> for (auto& consumer : m_audioConsumers)
</span><span class="cx"> consumer->setFormat(numberOfChannels, sampleRate);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void MediaStreamAudioSource::consumeAudio(AudioBus* bus, size_t numberOfFrames)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_audioConsumersLock);
</del><ins>+ LockHolder locker(m_audioConsumersLock);
</ins><span class="cx"> for (auto& consumer : m_audioConsumers)
</span><span class="cx"> consumer->consumeAudio(bus, numberOfFrames);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioMediaStreamAudioSourceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx">
</span><span class="cx"> #include "AudioDestinationConsumer.h"
</span><span class="cx"> #include "RealtimeMediaSource.h"
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/ThreadingPrimitives.h>
</span><span class="cx"> #include <wtf/Vector.h>
</span><span class="lines">@@ -65,7 +66,7 @@
</span><span class="cx"> MediaStreamAudioSource();
</span><span class="cx">
</span><span class="cx"> String m_deviceId;
</span><del>- Mutex m_audioConsumersLock;
</del><ins>+ Lock m_audioConsumersLock;
</ins><span class="cx"> Vector<RefPtr<AudioDestinationConsumer>> m_audioConsumers;
</span><span class="cx"> RealtimeMediaSourceStates m_currentStates;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/Database.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/Database.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -294,7 +294,7 @@
</span><span class="cx"> ASSERT(currentThread() == databaseContext()->databaseThread()->getThreadID());
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_transactionInProgressMutex);
</del><ins>+ LockHolder locker(m_transactionInProgressMutex);
</ins><span class="cx">
</span><span class="cx"> // Clean up transactions that have not been scheduled yet:
</span><span class="cx"> // Transaction phase 1 cleanup. See comment on "What happens if a
</span><span class="lines">@@ -353,7 +353,7 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> {
</span><span class="cx"> // Make sure we wait till the background removal of the empty database files finished before trying to open any database.
</span><del>- MutexLocker locker(DatabaseTracker::openDatabaseMutex());
</del><ins>+ LockHolder locker(DatabaseTracker::openDatabaseMutex());
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="lines">@@ -565,7 +565,7 @@
</span><span class="cx">
</span><span class="cx"> PassRefPtr<SQLTransactionBackend> Database::runTransaction(PassRefPtr<SQLTransaction> transaction, bool readOnly, const ChangeVersionData* data)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_transactionInProgressMutex);
</del><ins>+ LockHolder locker(m_transactionInProgressMutex);
</ins><span class="cx"> if (!m_isTransactionQueueEnabled)
</span><span class="cx"> return 0;
</span><span class="cx">
</span><span class="lines">@@ -593,14 +593,14 @@
</span><span class="cx">
</span><span class="cx"> void Database::inProgressTransactionCompleted()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_transactionInProgressMutex);
</del><ins>+ LockHolder locker(m_transactionInProgressMutex);
</ins><span class="cx"> m_transactionInProgress = false;
</span><span class="cx"> scheduleTransaction();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool Database::hasPendingTransaction()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_transactionInProgressMutex);
</del><ins>+ LockHolder locker(m_transactionInProgressMutex);
</ins><span class="cx"> return m_transactionInProgress || !m_transactionQueue.isEmpty();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/Database.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/Database.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2007, 2008, 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include "DatabaseError.h"
</span><span class="cx"> #include "SQLiteDatabase.h"
</span><span class="cx"> #include <wtf/Deque.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -162,7 +163,7 @@
</span><span class="cx"> RefPtr<DatabaseAuthorizer> m_databaseAuthorizer;
</span><span class="cx">
</span><span class="cx"> Deque<RefPtr<SQLTransactionBackend>> m_transactionQueue;
</span><del>- Mutex m_transactionInProgressMutex;
</del><ins>+ Lock m_transactionInProgressMutex;
</ins><span class="cx"> bool m_transactionInProgress;
</span><span class="cx"> bool m_isTransactionQueueEnabled;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTaskcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2007, 2008, 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx"> {
</span><span class="cx"> m_synchronousMutex.lock();
</span><span class="cx"> m_taskCompleted = true;
</span><del>- m_synchronousCondition.signal();
</del><ins>+ m_synchronousCondition.notifyOne();
</ins><span class="cx"> m_synchronousMutex.unlock();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTaskh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2007, 2008, 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -31,8 +31,9 @@
</span><span class="cx"> #include "DatabaseBasicTypes.h"
</span><span class="cx"> #include "DatabaseError.h"
</span><span class="cx"> #include "SQLTransactionBackend.h"
</span><ins>+#include <wtf/Condition.h>
+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/PassRefPtr.h>
</span><del>-#include <wtf/Threading.h>
</del><span class="cx"> #include <wtf/Vector.h>
</span><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="lines">@@ -58,8 +59,8 @@
</span><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> bool m_taskCompleted;
</span><del>- Mutex m_synchronousMutex;
- ThreadCondition m_synchronousCondition;
</del><ins>+ Lock m_synchronousMutex;
+ Condition m_synchronousCondition;
</ins><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> bool m_hasCheckedForTermination;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">
</span><span class="cx"> bool DatabaseThread::start()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_threadCreationMutex);
</del><ins>+ LockHolder lock(m_threadCreationMutex);
</ins><span class="cx">
</span><span class="cx"> if (m_threadID)
</span><span class="cx"> return true;
</span><span class="lines">@@ -100,7 +100,7 @@
</span><span class="cx"> {
</span><span class="cx"> {
</span><span class="cx"> // Wait for DatabaseThread::start() to complete.
</span><del>- MutexLocker lock(m_threadCreationMutex);
</del><ins>+ LockHolder lock(m_threadCreationMutex);
</ins><span class="cx"> LOG(StorageAPI, "Started DatabaseThread %p", this);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseThreadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx"> static void databaseThreadStart(void*);
</span><span class="cx"> void databaseThread();
</span><span class="cx">
</span><del>- Mutex m_threadCreationMutex;
</del><ins>+ Lock m_threadCreationMutex;
</ins><span class="cx"> ThreadIdentifier m_threadID;
</span><span class="cx"> RefPtr<DatabaseThread> m_selfRef;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTrackercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx">
</span><span class="cx"> void DatabaseTracker::setDatabaseDirectoryPath(const String& path)
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> ASSERT(!m_database.isOpen());
</span><span class="cx"> m_databaseDirectoryPath = path.isolatedCopy();
</span><span class="cx"> }
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx"> {
</span><span class="cx"> error = DatabaseError::None;
</span><span class="cx">
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> SecurityOrigin* origin = context->securityOrigin();
</span><span class="cx">
</span><span class="cx"> if (isDeletingDatabaseOrOriginFor(origin, name)) {
</span><span class="lines">@@ -218,7 +218,7 @@
</span><span class="cx"> {
</span><span class="cx"> error = DatabaseError::None;
</span><span class="cx">
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> SecurityOrigin* origin = context->securityOrigin();
</span><span class="cx">
</span><span class="cx"> // We have already eliminated other types of errors in canEstablishDatabase().
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx">
</span><span class="cx"> bool DatabaseTracker::hasEntryForOrigin(SecurityOrigin* origin)
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> return hasEntryForOriginNoLock(origin);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -286,7 +286,7 @@
</span><span class="cx"> {
</span><span class="cx"> // The maximum size for a database is the full quota for its origin, minus the current usage within the origin,
</span><span class="cx"> // plus the current usage of the given database
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> SecurityOrigin* origin = database->securityOrigin();
</span><span class="cx">
</span><span class="cx"> unsigned long long quota = quotaForOriginNoLock(origin);
</span><span class="lines">@@ -311,7 +311,7 @@
</span><span class="cx"> {
</span><span class="cx"> Vector<Ref<Database>> openDatabases;
</span><span class="cx"> {
</span><del>- MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
</del><ins>+ LockHolder openDatabaseMapLock(m_openDatabaseMapGuard);
</ins><span class="cx"> if (!m_openDatabaseMap)
</span><span class="cx"> return;
</span><span class="cx"> for (auto& nameMap : m_openDatabaseMap->values()) {
</span><span class="lines">@@ -389,13 +389,13 @@
</span><span class="cx">
</span><span class="cx"> String DatabaseTracker::fullPathForDatabase(SecurityOrigin* origin, const String& name, bool createIfNotExists)
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> return fullPathForDatabaseNoLock(origin, name, createIfNotExists).isolatedCopy();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void DatabaseTracker::origins(Vector<RefPtr<SecurityOrigin>>& originsResult)
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx">
</span><span class="cx"> openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="cx"> if (!m_database.isOpen())
</span><span class="lines">@@ -448,7 +448,7 @@
</span><span class="cx"> {
</span><span class="cx"> Vector<String> temp;
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> if (!databaseNamesForOriginNoLock(origin, temp))
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="lines">@@ -465,7 +465,7 @@
</span><span class="cx"> int64_t expectedUsage;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx">
</span><span class="cx"> openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="cx"> if (!m_database.isOpen())
</span><span class="lines">@@ -500,7 +500,7 @@
</span><span class="cx"> String originIdentifier = origin->databaseIdentifier();
</span><span class="cx"> int64_t guid = 0;
</span><span class="cx">
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx">
</span><span class="cx"> openTrackerDatabase(CreateIfDoesNotExist);
</span><span class="cx"> if (!m_database.isOpen())
</span><span class="lines">@@ -549,7 +549,7 @@
</span><span class="cx">
</span><span class="cx"> void DatabaseTracker::doneCreatingDatabase(Database* database)
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> doneCreatingDatabase(database->securityOrigin(), database->stringIdentifier());
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -559,7 +559,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
</del><ins>+ LockHolder openDatabaseMapLock(m_openDatabaseMapGuard);
</ins><span class="cx">
</span><span class="cx"> if (!m_openDatabaseMap)
</span><span class="cx"> m_openDatabaseMap = std::make_unique<DatabaseOriginMap>();
</span><span class="lines">@@ -589,7 +589,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
</del><ins>+ LockHolder openDatabaseMapLock(m_openDatabaseMapGuard);
</ins><span class="cx">
</span><span class="cx"> if (!m_openDatabaseMap) {
</span><span class="cx"> ASSERT_NOT_REACHED();
</span><span class="lines">@@ -629,7 +629,7 @@
</span><span class="cx">
</span><span class="cx"> void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<Database>>* databases)
</span><span class="cx"> {
</span><del>- MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
</del><ins>+ LockHolder openDatabaseMapLock(m_openDatabaseMapGuard);
</ins><span class="cx"> if (!m_openDatabaseMap)
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="lines">@@ -647,7 +647,7 @@
</span><span class="cx">
</span><span class="cx"> RefPtr<OriginLock> DatabaseTracker::originLockFor(SecurityOrigin* origin)
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> String databaseIdentifier = origin->databaseIdentifier();
</span><span class="cx">
</span><span class="cx"> // The originLockMap is accessed from multiple DatabaseThreads since
</span><span class="lines">@@ -727,13 +727,13 @@
</span><span class="cx">
</span><span class="cx"> unsigned long long DatabaseTracker::quotaForOrigin(SecurityOrigin* origin)
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> return quotaForOriginNoLock(origin);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void DatabaseTracker::setQuota(SecurityOrigin* origin, unsigned long long quota)
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx">
</span><span class="cx"> if (quotaForOriginNoLock(origin) == quota)
</span><span class="cx"> return;
</span><span class="lines">@@ -864,7 +864,7 @@
</span><span class="cx"> {
</span><span class="cx"> Vector<String> databaseNames;
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="cx"> if (!m_database.isOpen())
</span><span class="cx"> return false;
</span><span class="lines">@@ -890,7 +890,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> deleteOriginLockFor(origin);
</span><span class="cx"> doneDeletingOrigin(origin);
</span><span class="cx">
</span><span class="lines">@@ -1071,7 +1071,7 @@
</span><span class="cx"> bool DatabaseTracker::deleteDatabase(SecurityOrigin* origin, const String& name)
</span><span class="cx"> {
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="cx"> if (!m_database.isOpen())
</span><span class="cx"> return false;
</span><span class="lines">@@ -1086,12 +1086,12 @@
</span><span class="cx"> // We drop the lock here because holding locks during a call to deleteDatabaseFile will deadlock.
</span><span class="cx"> if (!deleteDatabaseFile(origin, name)) {
</span><span class="cx"> LOG_ERROR("Unable to delete file for database %s in origin %s", name.ascii().data(), origin->databaseIdentifier().ascii().data());
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> doneDeletingDatabase(origin, name);
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx">
</span><span class="cx"> SQLiteStatement statement(m_database, "DELETE FROM Databases WHERE origin=? AND name=?");
</span><span class="cx"> if (statement.prepare() != SQLITE_OK) {
</span><span class="lines">@@ -1131,7 +1131,7 @@
</span><span class="cx">
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> {
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> ASSERT(isDeletingDatabaseOrOriginFor(origin, name));
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="lines">@@ -1142,7 +1142,7 @@
</span><span class="cx"> // Database::markAsDeletedAndClose(), since that can cause a deadlock
</span><span class="cx"> // during the synchronous DatabaseThread call it triggers.
</span><span class="cx"> {
</span><del>- MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
</del><ins>+ LockHolder openDatabaseMapLock(m_openDatabaseMapGuard);
</ins><span class="cx"> if (m_openDatabaseMap) {
</span><span class="cx"> // There are some open databases, lets check if they are for this origin.
</span><span class="cx"> DatabaseNameMap* nameMap = m_openDatabaseMap->get(origin);
</span><span class="lines">@@ -1185,7 +1185,7 @@
</span><span class="cx">
</span><span class="cx"> {
</span><span class="cx"> // Acquire the lock before calling openTrackerDatabase.
</span><del>- MutexLocker lockDatabase(m_databaseGuard);
</del><ins>+ LockHolder lockDatabase(m_databaseGuard);
</ins><span class="cx"> openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1201,7 +1201,7 @@
</span><span class="cx"> // Database::markAsDeletedAndClose(), since that can cause a deadlock
</span><span class="cx"> // during the synchronous DatabaseThread call it triggers.
</span><span class="cx"> {
</span><del>- MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
</del><ins>+ LockHolder openDatabaseMapLock(m_openDatabaseMapGuard);
</ins><span class="cx"> if (m_openDatabaseMap) {
</span><span class="cx"> for (auto& openDatabase : *m_openDatabaseMap) {
</span><span class="cx"> auto& origin = openDatabase.key;
</span><span class="lines">@@ -1305,9 +1305,9 @@
</span><span class="cx"> return SQLiteFileSystem::deleteDatabaseFile(path);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Mutex& DatabaseTracker::openDatabaseMutex()
</del><ins>+Lock& DatabaseTracker::openDatabaseMutex()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<Mutex> mutex;
</del><ins>+ static NeverDestroyed<Lock> mutex;
</ins><span class="cx"> return mutex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1330,9 +1330,9 @@
</span><span class="cx"> m_client = client;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static Mutex& notificationMutex()
</del><ins>+static Lock& notificationMutex()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<Mutex> mutex;
</del><ins>+ static NeverDestroyed<Lock> mutex;
</ins><span class="cx"> return mutex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1346,7 +1346,7 @@
</span><span class="cx">
</span><span class="cx"> void DatabaseTracker::scheduleNotifyDatabaseChanged(SecurityOrigin* origin, const String& name)
</span><span class="cx"> {
</span><del>- MutexLocker locker(notificationMutex());
</del><ins>+ LockHolder locker(notificationMutex());
</ins><span class="cx">
</span><span class="cx"> notificationQueue().append(std::pair<RefPtr<SecurityOrigin>, String>(origin->isolatedCopy(), name.isolatedCopy()));
</span><span class="cx"> scheduleForNotification();
</span><span class="lines">@@ -1372,7 +1372,7 @@
</span><span class="cx">
</span><span class="cx"> NotificationQueue notifications;
</span><span class="cx"> {
</span><del>- MutexLocker locker(notificationMutex());
</del><ins>+ LockHolder locker(notificationMutex());
</ins><span class="cx">
</span><span class="cx"> notifications.swap(notificationQueue());
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTrackerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx"> // MobileSafari will grab this mutex on the main thread before dispatching the task to
</span><span class="cx"> // clean up zero byte database files. Any operations to open new database will have to
</span><span class="cx"> // wait for that task to finish by waiting on this mutex.
</span><del>- static Mutex& openDatabaseMutex();
</del><ins>+ static Lock& openDatabaseMutex();
</ins><span class="cx">
</span><span class="cx"> WEBCORE_EXPORT static void emptyDatabaseFilesRemovalTaskWillBeScheduled();
</span><span class="cx"> WEBCORE_EXPORT static void emptyDatabaseFilesRemovalTaskDidFinish();
</span><span class="lines">@@ -150,11 +150,11 @@
</span><span class="cx"> typedef HashMap<String, DatabaseSet*> DatabaseNameMap;
</span><span class="cx"> typedef HashMap<RefPtr<SecurityOrigin>, DatabaseNameMap*> DatabaseOriginMap;
</span><span class="cx">
</span><del>- Mutex m_openDatabaseMapGuard;
</del><ins>+ Lock m_openDatabaseMapGuard;
</ins><span class="cx"> mutable std::unique_ptr<DatabaseOriginMap> m_openDatabaseMap;
</span><span class="cx">
</span><span class="cx"> // This lock protects m_database, m_originLockMap, m_databaseDirectoryPath, m_originsBeingDeleted, m_beingCreated, and m_beingDeleted.
</span><del>- Mutex m_databaseGuard;
</del><ins>+ Lock m_databaseGuard;
</ins><span class="cx"> SQLiteDatabase m_database;
</span><span class="cx">
</span><span class="cx"> typedef HashMap<String, RefPtr<OriginLock>> OriginLockMap;
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseOriginLockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/OriginLock.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/OriginLock.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/OriginLock.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -27,8 +27,8 @@
</span><span class="cx"> #define OriginLock_h
</span><span class="cx">
</span><span class="cx"> #include "FileSystem.h"
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/ThreadSafeRefCounted.h>
</span><del>-#include <wtf/ThreadingPrimitives.h>
</del><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> static String lockFileNameForPath(String originPath);
</span><span class="cx">
</span><span class="cx"> String m_lockFileName;
</span><del>- Mutex m_mutex;
</del><ins>+ Lock m_mutex;
</ins><span class="cx"> #if USE(FILE_LOCK)
</span><span class="cx"> PlatformFileHandle m_lockHandle;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseSQLCallbackWrapperh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> #define SQLCallbackWrapper_h
</span><span class="cx">
</span><span class="cx"> #include "ScriptExecutionContext.h"
</span><del>-#include <wtf/ThreadingPrimitives.h>
</del><ins>+#include <wtf/Lock.h>
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx"> ScriptExecutionContext* scriptExecutionContextPtr;
</span><span class="cx"> T* callback;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> if (!m_callback) {
</span><span class="cx"> ASSERT(!m_scriptExecutionContext);
</span><span class="cx"> return;
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">
</span><span class="cx"> PassRefPtr<T> unwrap()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> ASSERT(!m_callback || m_scriptExecutionContext->isContextThread());
</span><span class="cx"> m_scriptExecutionContext = nullptr;
</span><span class="cx"> return m_callback.release();
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx"> bool hasCallback() const { return m_callback; }
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- Mutex m_mutex;
</del><ins>+ Lock m_mutex;
</ins><span class="cx"> RefPtr<T> m_callback;
</span><span class="cx"> RefPtr<ScriptExecutionContext> m_scriptExecutionContext;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseSQLTransactionBackendcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -381,7 +381,7 @@
</span><span class="cx">
</span><span class="cx"> releaseOriginLockIfNeeded();
</span><span class="cx">
</span><del>- MutexLocker locker(m_statementMutex);
</del><ins>+ LockHolder locker(m_statementMutex);
</ins><span class="cx"> m_statementQueue.clear();
</span><span class="cx">
</span><span class="cx"> if (m_sqliteTransaction) {
</span><span class="lines">@@ -465,7 +465,7 @@
</span><span class="cx">
</span><span class="cx"> void SQLTransactionBackend::enqueueStatementBackend(std::unique_ptr<SQLStatement> statementBackend)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_statementMutex);
</del><ins>+ LockHolder locker(m_statementMutex);
</ins><span class="cx"> m_statementQueue.append(WTF::move(statementBackend));
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -681,7 +681,7 @@
</span><span class="cx"> {
</span><span class="cx"> m_currentStatementBackend = nullptr;
</span><span class="cx">
</span><del>- MutexLocker locker(m_statementMutex);
</del><ins>+ LockHolder locker(m_statementMutex);
</ins><span class="cx"> if (!m_statementQueue.isEmpty())
</span><span class="cx"> m_currentStatementBackend = m_statementQueue.takeFirst();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseSQLTransactionBackendh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2007, 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2007, 2013, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx"> #include <memory>
</span><span class="cx"> #include <wtf/Deque.h>
</span><span class="cx"> #include <wtf/Forward.h>
</span><del>-#include <wtf/ThreadingPrimitives.h>
</del><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx"> bool m_readOnly;
</span><span class="cx"> bool m_hasVersionMismatch;
</span><span class="cx">
</span><del>- Mutex m_statementMutex;
</del><ins>+ Lock m_statementMutex;
</ins><span class="cx"> Deque<std::unique_ptr<SQLStatement>> m_statementQueue;
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<SQLiteTransaction> m_sqliteTransaction;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsWorkerScriptControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/WorkerScriptController.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/WorkerScriptController.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/bindings/js/WorkerScriptController.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx"> // The mutex provides a memory barrier to ensure that once
</span><span class="cx"> // termination is scheduled, isExecutionTerminating will
</span><span class="cx"> // accurately reflect that state when called from another thread.
</span><del>- MutexLocker locker(m_scheduledTerminationMutex);
</del><ins>+ LockHolder locker(m_scheduledTerminationMutex);
</ins><span class="cx"> if (m_vm->watchdog)
</span><span class="cx"> m_vm->watchdog->fire();
</span><span class="cx"> }
</span><span class="lines">@@ -159,7 +159,7 @@
</span><span class="cx"> bool WorkerScriptController::isExecutionTerminating() const
</span><span class="cx"> {
</span><span class="cx"> // See comments in scheduleExecutionTermination regarding mutex usage.
</span><del>- MutexLocker locker(m_scheduledTerminationMutex);
</del><ins>+ LockHolder locker(m_scheduledTerminationMutex);
</ins><span class="cx"> if (m_vm->watchdog)
</span><span class="cx"> return m_vm->watchdog->didFire();
</span><span class="cx"> return false;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsWorkerScriptControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/WorkerScriptController.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/WorkerScriptController.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/bindings/js/WorkerScriptController.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
</del><ins>+ * Copyright (C) 2008, 2015 Apple Inc. All Rights Reserved.
</ins><span class="cx"> * Copyright (C) 2012 Google Inc. All Rights Reserved.
</span><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -31,8 +31,8 @@
</span><span class="cx"> #include <debugger/Debugger.h>
</span><span class="cx"> #include <heap/Strong.h>
</span><span class="cx"> #include <wtf/Forward.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/NakedPtr.h>
</span><del>-#include <wtf/Threading.h>
</del><span class="cx">
</span><span class="cx"> namespace Deprecated {
</span><span class="cx"> class ScriptValue;
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx"> WorkerGlobalScope* m_workerGlobalScope;
</span><span class="cx"> JSC::Strong<JSWorkerGlobalScope> m_workerGlobalScopeWrapper;
</span><span class="cx"> bool m_executionForbidden;
</span><del>- mutable Mutex m_scheduledTerminationMutex;
</del><ins>+ mutable Lock m_scheduledTerminationMutex;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoredomdefaultPlatformMessagePortChannelcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx">
</span><span class="cx"> void MessagePortChannel::postMessageToRemote(PassRefPtr<SerializedScriptValue> message, std::unique_ptr<MessagePortChannelArray> channels)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_channel->m_mutex);
</del><ins>+ LockHolder lock(m_channel->m_mutex);
</ins><span class="cx"> if (!m_channel->m_outgoingQueue)
</span><span class="cx"> return;
</span><span class="cx"> bool wasEmpty = m_channel->m_outgoingQueue->appendAndCheckEmpty(std::make_unique<PlatformMessagePortChannel::EventData>(message, WTF::move(channels)));
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx">
</span><span class="cx"> bool MessagePortChannel::tryGetMessageFromRemote(RefPtr<SerializedScriptValue>& message, std::unique_ptr<MessagePortChannelArray>& channels)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_channel->m_mutex);
</del><ins>+ LockHolder lock(m_channel->m_mutex);
</ins><span class="cx"> auto result = m_channel->m_incomingQueue->tryGetMessage();
</span><span class="cx"> if (!result)
</span><span class="cx"> return false;
</span><span class="lines">@@ -121,20 +121,20 @@
</span><span class="cx"> bool MessagePortChannel::isConnectedTo(MessagePort* port)
</span><span class="cx"> {
</span><span class="cx"> // FIXME: What guarantees that the result remains the same after we release the lock?
</span><del>- MutexLocker lock(m_channel->m_mutex);
</del><ins>+ LockHolder lock(m_channel->m_mutex);
</ins><span class="cx"> return m_channel->m_remotePort == port;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool MessagePortChannel::hasPendingActivity()
</span><span class="cx"> {
</span><span class="cx"> // FIXME: What guarantees that the result remains the same after we release the lock?
</span><del>- MutexLocker lock(m_channel->m_mutex);
</del><ins>+ LockHolder lock(m_channel->m_mutex);
</ins><span class="cx"> return !m_channel->m_incomingQueue->isEmpty();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> MessagePort* MessagePortChannel::locallyEntangledPort(const ScriptExecutionContext* context)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_channel->m_mutex);
</del><ins>+ LockHolder lock(m_channel->m_mutex);
</ins><span class="cx"> // See if both contexts are run by the same thread (are the same context, or are both documents).
</span><span class="cx"> if (m_channel->m_remotePort) {
</span><span class="cx"> // The remote port's ScriptExecutionContext is guaranteed not to change here - MessagePort::contextDestroyed()
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx">
</span><span class="cx"> void PlatformMessagePortChannel::setRemotePort(MessagePort* port)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> // Should never set port if it is already set.
</span><span class="cx"> ASSERT(!port || !m_remotePort);
</span><span class="cx"> m_remotePort = port;
</span><span class="lines">@@ -175,13 +175,13 @@
</span><span class="cx"> // FIXME: What guarantees that the result remains the same after we release the lock?
</span><span class="cx"> // This lock only guarantees that the returned pointer will not be pointing to released memory,
</span><span class="cx"> // but not that it will still be pointing to this object's entangled port channel.
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> return m_entangledChannel;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void PlatformMessagePortChannel::closeInternal()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> // Disentangle ourselves from the other end. We still maintain a reference to our incoming queue, since previously-existing messages should still be delivered.
</span><span class="cx"> m_remotePort = nullptr;
</span><span class="cx"> m_entangledChannel = nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCoredomdefaultPlatformMessagePortChannelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/dom/default/PlatformMessagePortChannel.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -95,8 +95,8 @@
</span><span class="cx"> void setRemotePort(MessagePort*);
</span><span class="cx"> void closeInternal();
</span><span class="cx">
</span><del>- // Mutex used to ensure exclusive access to the object internals.
- Mutex m_mutex;
</del><ins>+ // Lock used to ensure exclusive access to the object internals.
+ Lock m_mutex;
</ins><span class="cx">
</span><span class="cx"> // Pointer to our entangled pair - cleared when close() is called.
</span><span class="cx"> RefPtr<PlatformMessagePortChannel> m_entangledChannel;
</span></span></pre></div>
<a id="trunkSourceWebCoreloadericonIconDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/icon/IconDatabase.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/icon/IconDatabase.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/loader/icon/IconDatabase.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -186,7 +186,7 @@
</span><span class="cx">
</span><span class="cx"> // Clear the in-memory record of every IconRecord, anything waiting to be read from disk, and anything waiting to be written to disk
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx">
</span><span class="cx"> // Clear the IconRecords for every page URL - RefCounting will cause the IconRecords themselves to be deleted
</span><span class="cx"> // We don't delete the actual PageRecords because we have the "retain icon for url" count to keep track of
</span><span class="lines">@@ -200,14 +200,14 @@
</span><span class="cx">
</span><span class="cx"> // Clear all in-memory records of things that need to be synced out to disk
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingSyncLock);
</del><ins>+ LockHolder locker(m_pendingSyncLock);
</ins><span class="cx"> m_pageURLsPendingSync.clear();
</span><span class="cx"> m_iconsPendingSync.clear();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Clear all in-memory records of things that need to be read in from disk
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx"> m_pageURLsPendingImport.clear();
</span><span class="cx"> m_pageURLsInterestedInIcons.clear();
</span><span class="cx"> m_iconsPendingReading.clear();
</span><span class="lines">@@ -229,7 +229,7 @@
</span><span class="cx"> if (!isOpen() || !documentCanHaveIcon(pageURLOriginal))
</span><span class="cx"> return 0;
</span><span class="cx">
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx">
</span><span class="cx"> performPendingRetainAndReleaseOperations();
</span><span class="cx">
</span><span class="lines">@@ -245,7 +245,7 @@
</span><span class="cx"> // 1 - The initial url import is incomplete and this pageURL was marked to be notified once it is complete if an iconURL exists
</span><span class="cx"> // 2 - The initial url import IS complete and this pageURL has no icon
</span><span class="cx"> if (!pageRecord) {
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx">
</span><span class="cx"> // Import is ongoing, there might be an icon. In this case, register to be notified when the icon comes in
</span><span class="cx"> // If we ever reach this condition, we know we've already made the pageURL copy
</span><span class="lines">@@ -276,7 +276,7 @@
</span><span class="cx"> if (pageURLCopy.isNull())
</span><span class="cx"> pageURLCopy = pageURLOriginal.isolatedCopy();
</span><span class="cx">
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx"> m_pageURLsInterestedInIcons.add(pageURLCopy);
</span><span class="cx"> m_iconsPendingReading.add(iconRecord);
</span><span class="cx"> wakeSyncThread();
</span><span class="lines">@@ -307,7 +307,7 @@
</span><span class="cx"> if (!icon)
</span><span class="cx"> return 0;
</span><span class="cx">
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> return icon->nativeImageForCurrentFrame();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -329,7 +329,7 @@
</span><span class="cx"> if (!isOpen() || !documentCanHaveIcon(pageURLOriginal))
</span><span class="cx"> return String();
</span><span class="cx">
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx">
</span><span class="cx"> PageURLRecord* pageRecord = m_pageURLToRecordMap.get(pageURLOriginal);
</span><span class="cx"> if (!pageRecord)
</span><span class="lines">@@ -417,7 +417,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlsToRetainOrReleaseLock);
</del><ins>+ LockHolder locker(m_urlsToRetainOrReleaseLock);
</ins><span class="cx"> m_urlsToRetain.add(pageURL.isolatedCopy());
</span><span class="cx"> m_retainOrReleaseIconRequested = true;
</span><span class="cx"> }
</span><span class="lines">@@ -450,7 +450,7 @@
</span><span class="cx"> if (!m_iconURLImportComplete)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_pendingSyncLock);
</del><ins>+ LockHolder locker(m_pendingSyncLock);
</ins><span class="cx"> // If this pageURL waiting to be sync'ed, update the sync record
</span><span class="cx"> // This saves us in the case where a page was ready to be deleted from the database but was just retained - so theres no need to delete it!
</span><span class="cx"> if (!m_privateBrowsingEnabled && m_pageURLsPendingSync.contains(pageURL)) {
</span><span class="lines">@@ -470,7 +470,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlsToRetainOrReleaseLock);
</del><ins>+ LockHolder locker(m_urlsToRetainOrReleaseLock);
</ins><span class="cx"> m_urlsToRelease.add(pageURL.isolatedCopy());
</span><span class="cx"> m_retainOrReleaseIconRequested = true;
</span><span class="cx"> }
</span><span class="lines">@@ -506,7 +506,7 @@
</span><span class="cx"> ASSERT(!iconRecord || (iconRecord && m_iconURLToRecordMap.get(iconRecord->iconURL()) == iconRecord));
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx">
</span><span class="cx"> // Since this pageURL is going away, there's no reason anyone would ever be interested in its read results
</span><span class="cx"> if (!m_iconURLImportComplete)
</span><span class="lines">@@ -522,7 +522,7 @@
</span><span class="cx">
</span><span class="cx"> // Mark stuff for deletion from the database only if we're not in private browsing
</span><span class="cx"> if (!m_privateBrowsingEnabled) {
</span><del>- MutexLocker locker(m_pendingSyncLock);
</del><ins>+ LockHolder locker(m_pendingSyncLock);
</ins><span class="cx"> m_pageURLsPendingSync.set(pageURLOriginal.isolatedCopy(), pageRecord->snapshot(true));
</span><span class="cx">
</span><span class="cx"> // If this page is the last page to refer to a particular IconRecord, that IconRecord needs to
</span><span class="lines">@@ -548,12 +548,12 @@
</span><span class="cx">
</span><span class="cx"> Vector<String> pageURLs;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx">
</span><span class="cx"> // If this icon was pending a read, remove it from that set because this new data should override what is on disk
</span><span class="cx"> RefPtr<IconRecord> icon = m_iconURLToRecordMap.get(iconURL);
</span><span class="cx"> if (icon) {
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx"> m_iconsPendingReading.remove(icon.get());
</span><span class="cx"> } else
</span><span class="cx"> icon = getOrCreateIconRecord(iconURL);
</span><span class="lines">@@ -567,7 +567,7 @@
</span><span class="cx">
</span><span class="cx"> // Mark the IconRecord as requiring an update to the database only if private browsing is disabled
</span><span class="cx"> if (!m_privateBrowsingEnabled) {
</span><del>- MutexLocker locker(m_pendingSyncLock);
</del><ins>+ LockHolder locker(m_pendingSyncLock);
</ins><span class="cx"> m_iconsPendingSync.set(iconURL, icon->snapshot());
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -608,7 +608,7 @@
</span><span class="cx"> String iconURL, pageURL;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx">
</span><span class="cx"> PageURLRecord* pageRecord = m_pageURLToRecordMap.get(pageURLOriginal);
</span><span class="cx">
</span><span class="lines">@@ -636,13 +636,13 @@
</span><span class="cx"> ASSERT(iconRecord->retainingPageURLs().size() == 0);
</span><span class="cx"> LOG(IconDatabase, "Icon for icon url %s is about to be destroyed - removing mapping for it", urlForLogging(iconRecord->iconURL()).ascii().data());
</span><span class="cx"> m_iconURLToRecordMap.remove(iconRecord->iconURL());
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx"> m_iconsPendingReading.remove(iconRecord.get());
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // And mark this mapping to be added to the database
</span><span class="cx"> if (!m_privateBrowsingEnabled) {
</span><del>- MutexLocker locker(m_pendingSyncLock);
</del><ins>+ LockHolder locker(m_pendingSyncLock);
</ins><span class="cx"> m_pageURLsPendingSync.set(pageURL, pageRecord->snapshot());
</span><span class="cx">
</span><span class="cx"> // If the icon is on its last ref, mark it for deletion
</span><span class="lines">@@ -674,7 +674,7 @@
</span><span class="cx"> // 1 - When we read the icon urls from disk, getting the timeStamp at the same time
</span><span class="cx"> // 2 - When we get a new icon from the loader, in which case the timestamp is set at that time
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> if (IconRecord* icon = m_iconURLToRecordMap.get(iconURL)) {
</span><span class="cx"> LOG(IconDatabase, "Found expiration time on a present icon based on existing IconRecord");
</span><span class="cx"> return static_cast<int>(currentTime()) - static_cast<int>(icon->getTimestamp()) > iconExpirationTime ? IconLoadYes : IconLoadNo;
</span><span class="lines">@@ -682,7 +682,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // If we don't have a record for it, but we *have* imported all iconURLs from disk, then we should load it now
</span><del>- MutexLocker readingLocker(m_pendingReadingLock);
</del><ins>+ LockHolder readingLocker(m_pendingReadingLock);
</ins><span class="cx"> if (m_iconURLImportComplete)
</span><span class="cx"> return IconLoadYes;
</span><span class="cx">
</span><span class="lines">@@ -699,7 +699,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT_NOT_SYNC_THREAD();
</span><span class="cx">
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> if (IconRecord* icon = m_iconURLToRecordMap.get(iconURL))
</span><span class="cx"> return icon->imageDataStatus() != ImageDataStatusUnknown;
</span><span class="cx">
</span><span class="lines">@@ -754,26 +754,26 @@
</span><span class="cx">
</span><span class="cx"> size_t IconDatabase::pageURLMappingCount()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> return m_pageURLToRecordMap.size();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> size_t IconDatabase::retainedPageURLCount()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> performPendingRetainAndReleaseOperations();
</span><span class="cx"> return m_retainedPageURLs.size();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> size_t IconDatabase::iconRecordCount()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> return m_iconURLToRecordMap.size();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> size_t IconDatabase::iconRecordCountWithData()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> size_t result = 0;
</span><span class="cx">
</span><span class="cx"> HashMap<String, IconRecord*>::iterator i = m_iconURLToRecordMap.begin();
</span><span class="lines">@@ -829,13 +829,13 @@
</span><span class="cx">
</span><span class="cx"> void IconDatabase::wakeSyncThread()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx">
</span><span class="cx"> if (!m_disableSuddenTerminationWhileSyncThreadHasWorkToDo)
</span><span class="cx"> m_disableSuddenTerminationWhileSyncThreadHasWorkToDo = std::make_unique<SuddenTerminationDisabler>();
</span><span class="cx">
</span><span class="cx"> m_syncThreadHasWorkToDo = true;
</span><del>- m_syncCondition.signal();
</del><ins>+ m_syncCondition.notifyOne();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void IconDatabase::scheduleOrDeferSyncTimer()
</span><span class="lines">@@ -874,13 +874,13 @@
</span><span class="cx">
</span><span class="cx"> bool IconDatabase::isOpenBesidesMainThreadCallbacks() const
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx"> return m_syncThreadRunning || m_syncDB.isOpen();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> String IconDatabase::databasePath() const
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx"> return m_completeDatabasePath.isolatedCopy();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -916,7 +916,7 @@
</span><span class="cx">
</span><span class="cx"> PageURLRecord* pageRecord = m_pageURLToRecordMap.get(pageURL);
</span><span class="cx">
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx"> if (!m_iconURLImportComplete) {
</span><span class="cx"> // If the initial import of all URLs hasn't completed and we have no page record, we assume we *might* know about this later and create a record for it
</span><span class="cx"> if (!pageRecord) {
</span><span class="lines">@@ -985,7 +985,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx"> if (!m_syncDB.open(m_completeDatabasePath)) {
</span><span class="cx"> LOG_ERROR("Unable to open icon database at path %s - %s", m_completeDatabasePath.ascii().data(), m_syncDB.lastErrorMsg());
</span><span class="cx"> return;
</span><span class="lines">@@ -1113,7 +1113,7 @@
</span><span class="cx"> m_syncDB.close();
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx"> // Should've been consumed by SQLite, delete just to make sure we don't see it again in the future;
</span><span class="cx"> deleteFile(m_completeDatabasePath + "-journal");
</span><span class="cx"> deleteFile(m_completeDatabasePath);
</span><span class="lines">@@ -1215,7 +1215,7 @@
</span><span class="cx"> String iconURL = query.getColumnText(1);
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx">
</span><span class="cx"> PageURLRecord* pageRecord = m_pageURLToRecordMap.get(pageURL);
</span><span class="cx">
</span><span class="lines">@@ -1248,7 +1248,7 @@
</span><span class="cx"> // one for the URL and one for the Image itself
</span><span class="cx"> // Note that WebIconDatabase is not neccessarily API so we might be able to make this change
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx"> if (m_pageURLsPendingImport.contains(pageURL)) {
</span><span class="cx"> dispatchDidImportIconURLForPageURLOnMainThread(pageURL);
</span><span class="cx"> m_pageURLsPendingImport.remove(pageURL);
</span><span class="lines">@@ -1271,7 +1271,7 @@
</span><span class="cx"> // but after m_iconURLImportComplete is set to true, we don't care about this set anymore
</span><span class="cx"> Vector<String> urls;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx">
</span><span class="cx"> urls.appendRange(m_pageURLsPendingImport.begin(), m_pageURLsPendingImport.end());
</span><span class="cx"> m_pageURLsPendingImport.clear();
</span><span class="lines">@@ -1284,7 +1284,7 @@
</span><span class="cx"> // Remove unretained ones if database cleanup is allowed
</span><span class="cx"> // Keep a set of ones that are retained and pending notification
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx">
</span><span class="cx"> performPendingRetainAndReleaseOperations();
</span><span class="cx">
</span><span class="lines">@@ -1301,12 +1301,12 @@
</span><span class="cx"> m_iconURLToRecordMap.remove(iconRecord->iconURL());
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx"> m_pageURLsInterestedInIcons.remove(urls[i]);
</span><span class="cx"> m_iconsPendingReading.remove(iconRecord);
</span><span class="cx"> }
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingSyncLock);
</del><ins>+ LockHolder locker(m_pendingSyncLock);
</ins><span class="cx"> m_iconsPendingSync.set(iconRecord->iconURL(), iconRecord->snapshot(true));
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -1371,7 +1371,7 @@
</span><span class="cx"> break;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> performPendingRetainAndReleaseOperations();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1451,7 +1451,7 @@
</span><span class="cx"> HashCountedSet<String> toRelease;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker pendingWorkLocker(m_urlsToRetainOrReleaseLock);
</del><ins>+ LockHolder pendingWorkLocker(m_urlsToRetainOrReleaseLock);
</ins><span class="cx"> if (!m_retainOrReleaseIconRequested)
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="lines">@@ -1488,7 +1488,7 @@
</span><span class="cx"> // This way we won't hold the lock for a long period of time
</span><span class="cx"> Vector<IconRecord*> icons;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingReadingLock);
</del><ins>+ LockHolder locker(m_pendingReadingLock);
</ins><span class="cx"> icons.appendRange(m_iconsPendingReading.begin(), m_iconsPendingReading.end());
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1501,9 +1501,9 @@
</span><span class="cx">
</span><span class="cx"> // Verify this icon still wants to be read from disk
</span><span class="cx"> {
</span><del>- MutexLocker urlLocker(m_urlAndIconLock);
</del><ins>+ LockHolder urlLocker(m_urlAndIconLock);
</ins><span class="cx"> {
</span><del>- MutexLocker readLocker(m_pendingReadingLock);
</del><ins>+ LockHolder readLocker(m_pendingReadingLock);
</ins><span class="cx">
</span><span class="cx"> if (m_iconsPendingReading.contains(icons[i])) {
</span><span class="cx"> // Set the new data
</span><span class="lines">@@ -1591,11 +1591,11 @@
</span><span class="cx"> // we'll pick it up on the next pass. This greatly simplifies the locking strategy for this method and remains cohesive with changes
</span><span class="cx"> // asked for by the database on the main thread
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> Vector<IconSnapshot> iconSnapshots;
</span><span class="cx"> Vector<PageURLSnapshot> pageSnapshots;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_pendingSyncLock);
</del><ins>+ LockHolder locker(m_pendingSyncLock);
</ins><span class="cx">
</span><span class="cx"> iconSnapshots.appendRange(m_iconsPendingSync.begin().values(), m_iconsPendingSync.end().values());
</span><span class="cx"> m_iconsPendingSync.clear();
</span><span class="lines">@@ -1658,7 +1658,7 @@
</span><span class="cx">
</span><span class="cx"> int result;
</span><span class="cx"> while ((result = pageSQL.step()) == SQLITE_ROW) {
</span><del>- MutexLocker locker(m_urlAndIconLock);
</del><ins>+ LockHolder locker(m_urlAndIconLock);
</ins><span class="cx"> if (!m_pageURLToRecordMap.contains(pageSQL.getColumnText(1)))
</span><span class="cx"> pageIDsToDelete.append(pageSQL.getColumnInt64(0));
</span><span class="cx"> }
</span><span class="lines">@@ -1791,7 +1791,7 @@
</span><span class="cx"> writeToDatabase();
</span><span class="cx">
</span><span class="cx"> // Close the database
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx">
</span><span class="cx"> m_databaseDirectory = String();
</span><span class="cx"> m_completeDatabasePath = String();
</span></span></pre></div>
<a id="trunkSourceWebCoreloadericonIconDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/icon/IconDatabase.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/icon/IconDatabase.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/loader/icon/IconDatabase.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #if ENABLE(ICONDATABASE)
</span><span class="cx"> #include "SQLiteDatabase.h"
</span><span class="cx"> #include "Timer.h"
</span><ins>+#include <wtf/Condition.h>
</ins><span class="cx"> #include <wtf/HashCountedSet.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/HashSet.h>
</span><span class="lines">@@ -141,8 +142,8 @@
</span><span class="cx"> bool m_isEnabled;
</span><span class="cx"> bool m_privateBrowsingEnabled;
</span><span class="cx">
</span><del>- mutable Mutex m_syncLock;
- ThreadCondition m_syncCondition;
</del><ins>+ mutable Lock m_syncLock;
+ Condition m_syncCondition;
</ins><span class="cx"> String m_databaseDirectory;
</span><span class="cx"> // Holding m_syncLock is required when accessing m_completeDatabasePath
</span><span class="cx"> String m_completeDatabasePath;
</span><span class="lines">@@ -153,24 +154,24 @@
</span><span class="cx"> bool m_syncThreadHasWorkToDo;
</span><span class="cx"> std::unique_ptr<SuddenTerminationDisabler> m_disableSuddenTerminationWhileSyncThreadHasWorkToDo;
</span><span class="cx">
</span><del>- Mutex m_urlAndIconLock;
</del><ins>+ Lock m_urlAndIconLock;
</ins><span class="cx"> // Holding m_urlAndIconLock is required when accessing any of the following data structures or the objects they contain
</span><span class="cx"> HashMap<String, IconRecord*> m_iconURLToRecordMap;
</span><span class="cx"> HashMap<String, PageURLRecord*> m_pageURLToRecordMap;
</span><span class="cx"> HashSet<String> m_retainedPageURLs;
</span><span class="cx">
</span><del>- Mutex m_pendingSyncLock;
</del><ins>+ Lock m_pendingSyncLock;
</ins><span class="cx"> // Holding m_pendingSyncLock is required when accessing any of the following data structures
</span><span class="cx"> HashMap<String, PageURLSnapshot> m_pageURLsPendingSync;
</span><span class="cx"> HashMap<String, IconSnapshot> m_iconsPendingSync;
</span><span class="cx">
</span><del>- Mutex m_pendingReadingLock;
</del><ins>+ Lock m_pendingReadingLock;
</ins><span class="cx"> // Holding m_pendingSyncLock is required when accessing any of the following data structures - when dealing with IconRecord*s, holding m_urlAndIconLock is also required
</span><span class="cx"> HashSet<String> m_pageURLsPendingImport;
</span><span class="cx"> HashSet<String> m_pageURLsInterestedInIcons;
</span><span class="cx"> HashSet<IconRecord*> m_iconsPendingReading;
</span><span class="cx">
</span><del>- Mutex m_urlsToRetainOrReleaseLock;
</del><ins>+ Lock m_urlsToRetainOrReleaseLock;
</ins><span class="cx"> // Holding m_urlsToRetainOrReleaseLock is required when accessing any of the following data structures.
</span><span class="cx"> HashCountedSet<String> m_urlsToRetain;
</span><span class="cx"> HashCountedSet<String> m_urlsToRelease;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> bool ScrollingTree::shouldHandleWheelEventSynchronously(const PlatformWheelEvent& wheelEvent)
</span><span class="cx"> {
</span><span class="cx"> // This method is invoked by the event handling thread
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx">
</span><span class="cx"> bool shouldSetLatch = wheelEvent.shouldConsiderLatching();
</span><span class="cx">
</span><span class="lines">@@ -115,7 +115,7 @@
</span><span class="cx"> && (rootStateNodeChanged
</span><span class="cx"> || rootNode->hasChangedProperty(ScrollingStateFrameScrollingNode::NonFastScrollableRegion)
</span><span class="cx"> || rootNode->hasChangedProperty(ScrollingStateNode::ScrollLayer))) {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx">
</span><span class="cx"> if (rootStateNodeChanged || rootNode->hasChangedProperty(ScrollingStateNode::ScrollLayer))
</span><span class="cx"> m_mainFrameScrollPosition = FloatPoint();
</span><span class="lines">@@ -208,7 +208,7 @@
</span><span class="cx">
</span><span class="cx"> void ScrollingTree::setMainFramePinState(bool pinnedToTheLeft, bool pinnedToTheRight, bool pinnedToTheTop, bool pinnedToTheBottom)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_swipeStateMutex);
</del><ins>+ LockHolder locker(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> m_mainFramePinnedToTheLeft = pinnedToTheLeft;
</span><span class="cx"> m_mainFramePinnedToTheRight = pinnedToTheRight;
</span><span class="lines">@@ -218,54 +218,54 @@
</span><span class="cx">
</span><span class="cx"> FloatPoint ScrollingTree::mainFrameScrollPosition()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> return m_mainFrameScrollPosition;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ScrollingTree::setMainFrameScrollPosition(FloatPoint position)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> m_mainFrameScrollPosition = position;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool ScrollingTree::isPointInNonFastScrollableRegion(IntPoint p)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx">
</span><span class="cx"> return m_nonFastScrollableRegion.contains(p);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool ScrollingTree::isRubberBandInProgress()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx">
</span><span class="cx"> return m_mainFrameIsRubberBanding;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ScrollingTree::setMainFrameIsRubberBanding(bool isRubberBanding)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> m_mainFrameIsRubberBanding = isRubberBanding;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool ScrollingTree::isScrollSnapInProgress()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx">
</span><span class="cx"> return m_mainFrameIsScrollSnapping;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ScrollingTree::setMainFrameIsScrollSnapping(bool isScrollSnapping)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> m_mainFrameIsScrollSnapping = isScrollSnapping;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ScrollingTree::setCanRubberBandState(bool canRubberBandAtLeft, bool canRubberBandAtRight, bool canRubberBandAtTop, bool canRubberBandAtBottom)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_swipeStateMutex);
</del><ins>+ LockHolder locker(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> m_rubberBandsAtLeft = canRubberBandAtLeft;
</span><span class="cx"> m_rubberBandsAtRight = canRubberBandAtRight;
</span><span class="lines">@@ -275,28 +275,28 @@
</span><span class="cx">
</span><span class="cx"> bool ScrollingTree::rubberBandsAtLeft()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_swipeStateMutex);
</del><ins>+ LockHolder lock(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> return m_rubberBandsAtLeft;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool ScrollingTree::rubberBandsAtRight()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_swipeStateMutex);
</del><ins>+ LockHolder lock(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> return m_rubberBandsAtRight;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool ScrollingTree::rubberBandsAtBottom()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_swipeStateMutex);
</del><ins>+ LockHolder lock(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> return m_rubberBandsAtBottom;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool ScrollingTree::rubberBandsAtTop()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_swipeStateMutex);
</del><ins>+ LockHolder lock(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> return m_rubberBandsAtTop;
</span><span class="cx"> }
</span><span class="lines">@@ -308,14 +308,14 @@
</span><span class="cx">
</span><span class="cx"> void ScrollingTree::setScrollPinningBehavior(ScrollPinningBehavior pinning)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_swipeStateMutex);
</del><ins>+ LockHolder locker(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> m_scrollPinningBehavior = pinning;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ScrollPinningBehavior ScrollingTree::scrollPinningBehavior()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_swipeStateMutex);
</del><ins>+ LockHolder lock(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> return m_scrollPinningBehavior;
</span><span class="cx"> }
</span><span class="lines">@@ -325,7 +325,7 @@
</span><span class="cx"> if (wheelEvent.phase() != PlatformWheelEventPhaseBegan)
</span><span class="cx"> return false;
</span><span class="cx">
</span><del>- MutexLocker lock(m_swipeStateMutex);
</del><ins>+ LockHolder lock(m_swipeStateMutex);
</ins><span class="cx">
</span><span class="cx"> if (wheelEvent.deltaX() > 0 && m_mainFramePinnedToTheLeft && !m_rubberBandsAtLeft)
</span><span class="cx"> return true;
</span><span class="lines">@@ -351,19 +351,19 @@
</span><span class="cx">
</span><span class="cx"> ScrollingNodeID ScrollingTree::latchedNode()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> return m_latchedNode;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ScrollingTree::setLatchedNode(ScrollingNodeID node)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> m_latchedNode = node;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ScrollingTree::clearLatchedNode()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> m_latchedNode = 0;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingTreeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingTree.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include "ScrollingCoordinator.h"
</span><span class="cx"> #include "WheelEventTestTrigger.h"
</span><span class="cx"> #include <wtf/HashMap.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/ThreadSafeRefCounted.h>
</span><span class="cx"> #include <wtf/TypeCasts.h>
</span><span class="cx">
</span><span class="lines">@@ -160,11 +161,11 @@
</span><span class="cx"> typedef HashMap<ScrollingNodeID, ScrollingTreeNode*> ScrollingTreeNodeMap;
</span><span class="cx"> ScrollingTreeNodeMap m_nodeMap;
</span><span class="cx">
</span><del>- Mutex m_mutex;
</del><ins>+ Lock m_mutex;
</ins><span class="cx"> Region m_nonFastScrollableRegion;
</span><span class="cx"> FloatPoint m_mainFrameScrollPosition;
</span><span class="cx">
</span><del>- Mutex m_swipeStateMutex;
</del><ins>+ Lock m_swipeStateMutex;
</ins><span class="cx"> ScrollPinningBehavior m_scrollPinningBehavior { DoNotPin };
</span><span class="cx"> ScrollingNodeID m_latchedNode { 0 };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformMemoryPressureHandlerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/MemoryPressureHandler.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/MemoryPressureHandler.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/MemoryPressureHandler.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #include <wtf/Forward.h>
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/ThreadingPrimitives.h>
</span><span class="cx"> #elif OS(LINUX)
</span><span class="cx"> #include "Timer.h"
</span><span class="lines">@@ -137,7 +138,7 @@
</span><span class="cx"> bool m_clearPressureOnMemoryRelease;
</span><span class="cx"> void (^m_releaseMemoryBlock)();
</span><span class="cx"> CFRunLoopObserverRef m_observer;
</span><del>- Mutex m_observerMutex;
</del><ins>+ Lock m_observerMutex;
</ins><span class="cx"> #elif OS(LINUX)
</span><span class="cx"> int m_eventFD;
</span><span class="cx"> int m_pressureLevelFD;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformaudioHRTFDatabaseLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/audio/HRTFDatabaseLoader.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/audio/HRTFDatabaseLoader.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/audio/HRTFDatabaseLoader.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx">
</span><del>- MutexLocker locker(m_threadLock);
</del><ins>+ LockHolder locker(m_threadLock);
</ins><span class="cx">
</span><span class="cx"> if (!m_hrtfDatabase.get() && !m_databaseLoaderThread) {
</span><span class="cx"> // Start the asynchronous database loading process.
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx">
</span><span class="cx"> void HRTFDatabaseLoader::waitForLoaderThreadCompletion()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_threadLock);
</del><ins>+ LockHolder locker(m_threadLock);
</ins><span class="cx">
</span><span class="cx"> // waitForThreadCompletion() should not be called twice for the same thread.
</span><span class="cx"> if (m_databaseLoaderThread)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformaudioHRTFDatabaseLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/audio/HRTFDatabaseLoader.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/audio/HRTFDatabaseLoader.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/audio/HRTFDatabaseLoader.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #include "HRTFDatabase.h"
</span><span class="cx"> #include <memory>
</span><span class="cx"> #include <wtf/HashMap.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="lines">@@ -76,7 +77,7 @@
</span><span class="cx"> std::unique_ptr<HRTFDatabase> m_hrtfDatabase;
</span><span class="cx">
</span><span class="cx"> // Holding a m_threadLock is required when accessing m_databaseLoaderThread.
</span><del>- Mutex m_threadLock;
</del><ins>+ Lock m_threadLock;
</ins><span class="cx"> ThreadIdentifier m_databaseLoaderThread;
</span><span class="cx">
</span><span class="cx"> float m_databaseSampleRate;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformcocoaMemoryPressureHandlerCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/cocoa/MemoryPressureHandlerCocoa.mm        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx"> m_underMemoryPressure = true;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_observerMutex);
</del><ins>+ LockHolder locker(m_observerMutex);
</ins><span class="cx"> if (!m_observer) {
</span><span class="cx"> m_observer = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeWaiting | kCFRunLoopExit, NO /* don't repeat */,
</span><span class="cx"> 0, WebCore::respondToMemoryPressureCallback, NULL);
</span><span class="lines">@@ -272,14 +272,14 @@
</span><span class="cx"> m_underMemoryPressure = false;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_observerMutex);
</del><ins>+ LockHolder locker(m_observerMutex);
</ins><span class="cx"> m_memoryPressureReason = MemoryPressureReasonNone;
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool MemoryPressureHandler::shouldWaitForMemoryClearMessage()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_observerMutex);
</del><ins>+ LockHolder locker(m_observerMutex);
</ins><span class="cx"> return m_memoryPressureReason & MemoryPressureReasonVMStatus;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -288,7 +288,7 @@
</span><span class="cx"> ASSERT(WebThreadIsLockedOrDisabled());
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_observerMutex);
</del><ins>+ LockHolder locker(m_observerMutex);
</ins><span class="cx"> m_observer = 0;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsDisplayRefreshMonitorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx"> double monotonicAnimationStartTime;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> if (!m_scheduled)
</span><span class="cx"> ++m_unscheduledFireCount;
</span><span class="cx"> else
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx"> m_clientsToBeNotified = nullptr;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_mutex);
</del><ins>+ LockHolder lock(m_mutex);
</ins><span class="cx"> m_previousFrameDone = true;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsDisplayRefreshMonitorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/DisplayRefreshMonitor.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/DisplayRefreshMonitor.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/DisplayRefreshMonitor.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2010, 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2010, 2014, 2015 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -30,9 +30,9 @@
</span><span class="cx">
</span><span class="cx"> #include "PlatformScreen.h"
</span><span class="cx"> #include <wtf/HashSet.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><del>-#include <wtf/Threading.h>
</del><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">
</span><span class="cx"> void setMonotonicAnimationStartTime(double startTime) { m_monotonicAnimationStartTime = startTime; }
</span><span class="cx">
</span><del>- Mutex& mutex() { return m_mutex; }
</del><ins>+ Lock& mutex() { return m_mutex; }
</ins><span class="cx">
</span><span class="cx"> static RefPtr<DisplayRefreshMonitor> createDefaultDisplayRefreshMonitor(PlatformDisplayID);
</span><span class="cx">
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx"> bool m_previousFrameDone;
</span><span class="cx"> int m_unscheduledFireCount; // Number of times the display link has fired with no clients.
</span><span class="cx"> PlatformDisplayID m_displayID;
</span><del>- Mutex m_mutex;
</del><ins>+ Lock m_mutex;
</ins><span class="cx">
</span><span class="cx"> HashSet<DisplayRefreshMonitorClient*> m_clients;
</span><span class="cx"> HashSet<DisplayRefreshMonitorClient*>* m_clientsToBeNotified;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationMediaPlayerPrivateAVFoundationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -735,7 +735,7 @@
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateAVFoundation::setDelayCallbacks(bool delay) const
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_queueMutex);
</del><ins>+ LockHolder lock(m_queueMutex);
</ins><span class="cx"> if (delay)
</span><span class="cx"> ++m_delayCallbacks;
</span><span class="cx"> else {
</span><span class="lines">@@ -754,7 +754,7 @@
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateAVFoundation::clearMainThreadPendingFlag()
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_queueMutex);
</del><ins>+ LockHolder lock(m_queueMutex);
</ins><span class="cx"> m_mainThreadCallPending = false;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -820,7 +820,7 @@
</span><span class="cx">
</span><span class="cx"> Notification notification = Notification();
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_queueMutex);
</del><ins>+ LockHolder lock(m_queueMutex);
</ins><span class="cx">
</span><span class="cx"> if (m_queuedNotifications.isEmpty())
</span><span class="cx"> return;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationMediaPlayerPrivateAVFoundationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2011-2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2011-2015 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #include "Timer.h"
</span><span class="cx"> #include <functional>
</span><span class="cx"> #include <wtf/HashSet.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/RetainPtr.h>
</span><span class="cx"> #include <wtf/WeakPtr.h>
</span><span class="cx">
</span><span class="lines">@@ -317,7 +318,7 @@
</span><span class="cx"> std::function<void()> m_pendingSeek;
</span><span class="cx">
</span><span class="cx"> Vector<Notification> m_queuedNotifications;
</span><del>- mutable Mutex m_queueMutex;
</del><ins>+ mutable Lock m_queueMutex;
</ins><span class="cx">
</span><span class="cx"> mutable std::unique_ptr<PlatformTimeRanges> m_cachedLoadedTimeRanges;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsavfoundationcfMediaPlayerPrivateAVFoundationCFcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -158,7 +158,7 @@
</span><span class="cx"> private:
</span><span class="cx"> inline void* callbackContext() const { return reinterpret_cast<void*>(m_objectID); }
</span><span class="cx">
</span><del>- static Mutex& mapLock();
</del><ins>+ static Lock& mapLock();
</ins><span class="cx"> static HashMap<uintptr_t, AVFWrapper*>& map();
</span><span class="cx"> static AVFWrapper* avfWrapperForCallbackContext(void*);
</span><span class="cx"> void addToMap();
</span><span class="lines">@@ -1404,9 +1404,9 @@
</span><span class="cx"> m_avPlayer = 0;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Mutex& AVFWrapper::mapLock()
</del><ins>+Lock& AVFWrapper::mapLock()
</ins><span class="cx"> {
</span><del>- static Mutex mapLock;
</del><ins>+ static Lock mapLock;
</ins><span class="cx"> return mapLock;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1418,7 +1418,7 @@
</span><span class="cx">
</span><span class="cx"> void AVFWrapper::addToMap()
</span><span class="cx"> {
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx">
</span><span class="cx"> // HashMap doesn't like a key of 0, and also make sure we aren't
</span><span class="cx"> // using an object ID that's already in use.
</span><span class="lines">@@ -1434,7 +1434,7 @@
</span><span class="cx"> {
</span><span class="cx"> LOG(Media, "AVFWrapper::removeFromMap(%p %d)", this, m_objectID);
</span><span class="cx">
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> map().remove(m_objectID);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1635,7 +1635,7 @@
</span><span class="cx">
</span><span class="cx"> void AVFWrapper::periodicTimeObserverCallback(AVCFPlayerRef, CMTime cmTime, void* context)
</span><span class="cx"> {
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::periodicTimeObserverCallback invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span><span class="lines">@@ -1666,7 +1666,7 @@
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<NotificationCallbackData> notificationData { static_cast<NotificationCallbackData*>(context) };
</span><span class="cx">
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(notificationData->m_context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::processNotification invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span><span class="lines">@@ -1721,7 +1721,7 @@
</span><span class="cx">
</span><span class="cx"> void AVFWrapper::loadPlayableCompletionCallback(AVCFAssetRef, void* context)
</span><span class="cx"> {
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::loadPlayableCompletionCallback invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span><span class="lines">@@ -1749,7 +1749,7 @@
</span><span class="cx">
</span><span class="cx"> void AVFWrapper::loadMetadataCompletionCallback(AVCFAssetRef, void* context)
</span><span class="cx"> {
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::loadMetadataCompletionCallback invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span><span class="lines">@@ -1769,7 +1769,7 @@
</span><span class="cx">
</span><span class="cx"> void AVFWrapper::seekCompletedCallback(AVCFPlayerItemRef, Boolean finished, void* context)
</span><span class="cx"> {
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::seekCompletedCallback invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span><span class="lines">@@ -1812,7 +1812,7 @@
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<LegibleOutputData> legibleOutputData(reinterpret_cast<LegibleOutputData*>(context));
</span><span class="cx">
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(legibleOutputData->m_context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::processCue invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span><span class="lines">@@ -1828,7 +1828,7 @@
</span><span class="cx"> void AVFWrapper::legibleOutputCallback(void* context, AVCFPlayerItemLegibleOutputRef legibleOutput, CFArrayRef attributedStrings, CFArrayRef nativeSampleBuffers, CMTime itemTime)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!isMainThread());
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::legibleOutputCallback invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span><span class="lines">@@ -1866,7 +1866,7 @@
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<LoadRequestData> loadRequestData(reinterpret_cast<LoadRequestData*>(context));
</span><span class="cx">
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(loadRequestData->m_context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::processShouldWaitForLoadingOfResource invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span><span class="lines">@@ -1922,7 +1922,7 @@
</span><span class="cx"> Boolean AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource(AVCFAssetResourceLoaderRef resourceLoader, AVCFAssetResourceLoadingRequestRef loadingRequest, void *context)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(dispatch_get_main_queue() != dispatch_get_current_queue());
</span><del>- MutexLocker locker(mapLock());
</del><ins>+ LockHolder locker(mapLock());
</ins><span class="cx"> AVFWrapper* self = avfWrapperForCallbackContext(context);
</span><span class="cx"> if (!self) {
</span><span class="cx"> LOG(Media, "AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource invoked for deleted AVFWrapper %d", reinterpret_cast<uintptr_t>(context));
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsgstreamerInbandTextTrackPrivateGStreamercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx"> {
</span><span class="cx"> m_sampleTimerHandler.cancel();
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_sampleMutex);
</del><ins>+ LockHolder lock(m_sampleMutex);
</ins><span class="cx"> m_pendingSamples.append(sample);
</span><span class="cx"> }
</span><span class="cx"> m_sampleTimerHandler.schedule("[WebKit] InbandTextTrackPrivateGStreamer::notifyTrackOfSample", std::function<void()>(std::bind(&InbandTextTrackPrivateGStreamer::notifyTrackOfSample, this)));
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> {
</span><span class="cx"> Vector<GRefPtr<GstSample> > samples;
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_sampleMutex);
</del><ins>+ LockHolder lock(m_sampleMutex);
</ins><span class="cx"> m_pendingSamples.swap(samples);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsgstreamerInbandTextTrackPrivateGStreamerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include "GRefPtrGStreamer.h"
</span><span class="cx"> #include "InbandTextTrackPrivate.h"
</span><span class="cx"> #include "TrackPrivateBaseGStreamer.h"
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/glib/GThreadSafeMainLoopSource.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -67,7 +68,7 @@
</span><span class="cx"> gulong m_eventProbe;
</span><span class="cx"> Vector<GRefPtr<GstSample> > m_pendingSamples;
</span><span class="cx"> String m_streamId;
</span><del>- Mutex m_sampleMutex;
</del><ins>+ Lock m_sampleMutex;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsgstreamerTrackPrivateBaseGStreamercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx"> GRefPtr<GstTagList> tags;
</span><span class="cx"> g_object_get(m_pad.get(), "tags", &tags.outPtr(), NULL);
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_tagMutex);
</del><ins>+ LockHolder lock(m_tagMutex);
</ins><span class="cx"> m_tags.swap(tags);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -158,7 +158,7 @@
</span><span class="cx">
</span><span class="cx"> GRefPtr<GstTagList> tags;
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_tagMutex);
</del><ins>+ LockHolder lock(m_tagMutex);
</ins><span class="cx"> tags.swap(m_tags);
</span><span class="cx"> }
</span><span class="cx"> if (!tags)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsgstreamerTrackPrivateBaseGStreamerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #if ENABLE(VIDEO) && USE(GSTREAMER) && ENABLE(VIDEO_TRACK)
</span><span class="cx">
</span><span class="cx"> #include "GRefPtrGStreamer.h"
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/ThreadingPrimitives.h>
</span><span class="cx"> #include <wtf/glib/GThreadSafeMainLoopSource.h>
</span><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="lines">@@ -73,7 +74,7 @@
</span><span class="cx"> GThreadSafeMainLoopSource m_activeTimerHandler;
</span><span class="cx"> GThreadSafeMainLoopSource m_tagTimerHandler;
</span><span class="cx">
</span><del>- Mutex m_tagMutex;
</del><ins>+ Lock m_tagMutex;
</ins><span class="cx"> GRefPtr<GstTagList> m_tags;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsmacDisplayRefreshMonitorMaccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/mac/DisplayRefreshMonitorMac.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/mac/DisplayRefreshMonitorMac.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/mac/DisplayRefreshMonitorMac.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -84,14 +84,14 @@
</span><span class="cx"> setIsActive(true);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- MutexLocker lock(mutex());
</del><ins>+ LockHolder lock(mutex());
</ins><span class="cx"> setIsScheduled(true);
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void DisplayRefreshMonitorMac::displayLinkFired(double nowSeconds, double outputTimeSeconds)
</span><span class="cx"> {
</span><del>- MutexLocker lock(mutex());
</del><ins>+ LockHolder lock(mutex());
</ins><span class="cx"> if (!isPreviousFrameDone())
</span><span class="cx"> return;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicswinMediaPlayerPrivateMediaFoundationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -512,21 +512,21 @@
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateMediaFoundation::addListener(MediaPlayerListener* listener)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutexListeners);
</del><ins>+ LockHolder locker(m_mutexListeners);
</ins><span class="cx">
</span><span class="cx"> m_listeners.add(listener);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateMediaFoundation::removeListener(MediaPlayerListener* listener)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutexListeners);
</del><ins>+ LockHolder locker(m_mutexListeners);
</ins><span class="cx">
</span><span class="cx"> m_listeners.remove(listener);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateMediaFoundation::notifyDeleted()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutexListeners);
</del><ins>+ LockHolder locker(m_mutexListeners);
</ins><span class="cx">
</span><span class="cx"> for (HashSet<MediaPlayerListener*>::const_iterator it = m_listeners.begin(); it != m_listeners.end(); ++it)
</span><span class="cx"> (*it)->onMediaPlayerDeleted();
</span><span class="lines">@@ -704,7 +704,7 @@
</span><span class="cx">
</span><span class="cx"> HRESULT STDMETHODCALLTYPE MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke(__RPC__in_opt IMFAsyncResult *pAsyncResult)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> if (!m_mediaPlayer)
</span><span class="cx"> return S_OK;
</span><span class="lines">@@ -719,7 +719,7 @@
</span><span class="cx">
</span><span class="cx"> void MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> m_mediaPlayer = nullptr;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicswinMediaPlayerPrivateMediaFoundationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx">
</span><span class="cx"> class MediaPlayerListener;
</span><span class="cx"> HashSet<MediaPlayerListener*> m_listeners;
</span><del>- Mutex m_mutexListeners;
</del><ins>+ Lock m_mutexListeners;
</ins><span class="cx">
</span><span class="cx"> COMPtr<IMFMediaSession> m_mediaSession;
</span><span class="cx"> COMPtr<IMFSourceResolver> m_sourceResolver;
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx"> ULONG m_refCount;
</span><span class="cx"> MediaPlayerPrivateMediaFoundation* m_mediaPlayer;
</span><span class="cx"> bool m_event;
</span><del>- Mutex m_mutex;
</del><ins>+ Lock m_mutex;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosLegacyTileCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/LegacyTileCache.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/LegacyTileCache.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/ios/LegacyTileCache.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include "IntRect.h"
</span><span class="cx"> #include "IntSize.h"
</span><span class="cx"> #include "Timer.h"
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/Noncopyable.h>
</span><span class="cx"> #include <wtf/Optional.h>
</span><span class="cx"> #include <wtf/PassRefPtr.h>
</span><span class="lines">@@ -211,9 +212,9 @@
</span><span class="cx"> float m_pendingScale;
</span><span class="cx"> float m_pendingZoomedOutScale;
</span><span class="cx">
</span><del>- mutable Mutex m_tileMutex;
- mutable Mutex m_savedDisplayRectMutex;
- mutable Mutex m_contentReplacementImageMutex;
</del><ins>+ mutable Lock m_tileMutex;
+ mutable Lock m_savedDisplayRectMutex;
+ mutable Lock m_contentReplacementImageMutex;
</ins><span class="cx">
</span><span class="cx"> bool m_tileControllerShouldUseLowScaleTiles;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosLegacyTileCachemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/LegacyTileCache.mm (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/LegacyTileCache.mm        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/ios/LegacyTileCache.mm        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -147,7 +147,7 @@
</span><span class="cx"> if (m_tilesOpaque == opaque)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx">
</span><span class="cx"> m_tilesOpaque = opaque;
</span><span class="cx"> m_zoomedOutTileGrid->updateTileOpacity();
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx"> if (isTileCreationSuspended())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> LegacyTileGrid* activeGrid = activeTileGrid();
</span><span class="cx"> // Even though we aren't actually creating tiles in the inactive grid, we
</span><span class="cx"> // still need to drop invalid tiles in response to a layout.
</span><span class="lines">@@ -200,7 +200,7 @@
</span><span class="cx"> if (!keepsZoomedOutTiles() && !isTileInvalidationSuspended()) {
</span><span class="cx"> // Tile invalidation is normally suspended during zooming by UIKit but some applications
</span><span class="cx"> // using custom scrollviews may zoom without triggering the callbacks. Invalidate the tiles explicitly.
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> activeTileGrid()->dropAllTiles();
</span><span class="cx"> activeTileGrid()->createTiles(CoverVisibleOnly);
</span><span class="cx"> }
</span><span class="lines">@@ -225,7 +225,7 @@
</span><span class="cx"> ASSERT(m_pendingZoomedOutScale || m_pendingScale);
</span><span class="cx"> ASSERT(m_tilingMode != Disabled);
</span><span class="cx">
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx">
</span><span class="cx"> if (m_pendingZoomedOutScale) {
</span><span class="cx"> m_zoomedOutTileGrid->setScale(m_pendingZoomedOutScale);
</span><span class="lines">@@ -314,7 +314,7 @@
</span><span class="cx"> if (m_tilingMode == Zooming)
</span><span class="cx"> m_tilingMode = Minimal;
</span><span class="cx">
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> LegacyTileGrid* activeGrid = activeTileGrid();
</span><span class="cx"> if (activeGrid->checkDoSingleTileLayout()) {
</span><span class="cx"> m_tilingMode = savedTilingMode;
</span><span class="lines">@@ -327,14 +327,14 @@
</span><span class="cx"> void LegacyTileCache::layoutTilesNowForRect(const IntRect& rect)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(WebThreadIsLockedOrDisabled());
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx">
</span><span class="cx"> activeTileGrid()->addTilesCoveringRect(rect);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void LegacyTileCache::removeAllNonVisibleTiles()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> removeAllNonVisibleTilesInternal();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -356,7 +356,7 @@
</span><span class="cx">
</span><span class="cx"> void LegacyTileCache::removeAllTiles()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> m_zoomedOutTileGrid->dropAllTiles();
</span><span class="cx"> if (m_zoomedInTileGrid)
</span><span class="cx"> m_zoomedInTileGrid->dropAllTiles();
</span><span class="lines">@@ -364,7 +364,7 @@
</span><span class="cx">
</span><span class="cx"> void LegacyTileCache::removeForegroundTiles()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> if (!keepsZoomedOutTiles())
</span><span class="cx"> m_zoomedOutTileGrid->dropAllTiles();
</span><span class="cx"> if (m_zoomedInTileGrid)
</span><span class="lines">@@ -373,13 +373,13 @@
</span><span class="cx">
</span><span class="cx"> void LegacyTileCache::setContentReplacementImage(RetainPtr<CGImageRef> contentReplacementImage)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_contentReplacementImageMutex);
</del><ins>+ LockHolder locker(m_contentReplacementImageMutex);
</ins><span class="cx"> m_contentReplacementImage = contentReplacementImage;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RetainPtr<CGImageRef> LegacyTileCache::contentReplacementImage() const
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_contentReplacementImageMutex);
</del><ins>+ LockHolder locker(m_contentReplacementImageMutex);
</ins><span class="cx"> return m_contentReplacementImage;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -426,7 +426,7 @@
</span><span class="cx"> {
</span><span class="cx"> if (isTileCreationSuspended())
</span><span class="cx"> return;
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> createTilesInActiveGrid(CoverSpeculative);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -620,7 +620,7 @@
</span><span class="cx">
</span><span class="cx"> void LegacyTileCache::setNeedsDisplayInRect(const IntRect& dirtyRect)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_savedDisplayRectMutex);
</del><ins>+ LockHolder locker(m_savedDisplayRectMutex);
</ins><span class="cx"> bool addedFirstRect = m_savedDisplayRects.isEmpty();
</span><span class="cx"> m_savedDisplayRects.append(dirtyRect);
</span><span class="cx"> if (!addedFirstRect)
</span><span class="lines">@@ -692,7 +692,7 @@
</span><span class="cx"> if (m_tilingMode == Disabled)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> createTilesInActiveGrid(CoverVisibleOnly);
</span><span class="cx">
</span><span class="cx"> if (!m_savedDisplayRects.isEmpty())
</span><span class="lines">@@ -710,7 +710,7 @@
</span><span class="cx"> if ((m_pendingZoomedOutScale || m_pendingScale) && m_tilingMode != Disabled)
</span><span class="cx"> commitScaleChange();
</span><span class="cx"> else if (wasZooming) {
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> bringActiveTileGridToFront();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -753,7 +753,7 @@
</span><span class="cx"> return;
</span><span class="cx"> if (isTileInvalidationSuspended())
</span><span class="cx"> return;
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> flushSavedDisplayRects();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -764,7 +764,7 @@
</span><span class="cx">
</span><span class="cx"> Vector<IntRect> rects;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_savedDisplayRectMutex);
</del><ins>+ LockHolder locker(m_savedDisplayRectMutex);
</ins><span class="cx"> m_savedDisplayRects.swap(rects);
</span><span class="cx"> }
</span><span class="cx"> size_t size = rects.size();
</span><span class="lines">@@ -792,7 +792,7 @@
</span><span class="cx"> [[m_window contentView] viewWillDraw];
</span><span class="cx">
</span><span class="cx"> if (!m_savedDisplayRects.isEmpty()) {
</span><del>- MutexLocker locker(m_tileMutex);
</del><ins>+ LockHolder locker(m_tileMutex);
</ins><span class="cx"> flushSavedDisplayRects();
</span><span class="cx"> }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosLegacyTileLayerPoolh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/LegacyTileLayerPool.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/LegacyTileLayerPool.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/ios/LegacyTileLayerPool.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include "Timer.h"
</span><span class="cx"> #include <wtf/Deque.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/NeverDestroyed.h>
</span><span class="cx"> #include <wtf/RetainPtr.h>
</span><span class="cx"> #include <wtf/Threading.h>
</span><span class="lines">@@ -75,7 +76,7 @@
</span><span class="cx"> Vector<IntSize> m_sizesInPruneOrder;
</span><span class="cx"> unsigned m_totalBytes;
</span><span class="cx"> unsigned m_capacity;
</span><del>- Mutex m_layerPoolMutex;
</del><ins>+ Lock m_layerPoolMutex;
</ins><span class="cx">
</span><span class="cx"> double m_lastAddTime;
</span><span class="cx"> bool m_needsPrune;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosLegacyTileLayerPoolmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/LegacyTileLayerPool.mm (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/LegacyTileLayerPool.mm        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/ios/LegacyTileLayerPool.mm        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- MutexLocker locker(m_layerPoolMutex);
</del><ins>+ LockHolder locker(m_layerPoolMutex);
</ins><span class="cx"> listOfLayersWithSize(layerSize).prepend(layer);
</span><span class="cx"> m_totalBytes += bytesBackingLayerWithPixelSize(layerSize);
</span><span class="cx">
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx"> {
</span><span class="cx"> if (!canReuseLayerWithSize(size))
</span><span class="cx"> return nil;
</span><del>- MutexLocker locker(m_layerPoolMutex);
</del><ins>+ LockHolder locker(m_layerPoolMutex);
</ins><span class="cx"> LayerList& reuseList = listOfLayersWithSize(size, MarkAsUsed);
</span><span class="cx"> if (reuseList.isEmpty())
</span><span class="cx"> return nil;
</span><span class="lines">@@ -106,7 +106,7 @@
</span><span class="cx">
</span><span class="cx"> void LegacyTileLayerPool::setCapacity(unsigned capacity)
</span><span class="cx"> {
</span><del>- MutexLocker reuseLocker(m_layerPoolMutex);
</del><ins>+ LockHolder reuseLocker(m_layerPoolMutex);
</ins><span class="cx"> if (capacity < m_capacity)
</span><span class="cx"> schedulePrune();
</span><span class="cx"> m_capacity = capacity;
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx">
</span><span class="cx"> void LegacyTileLayerPool::prune()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_layerPoolMutex);
</del><ins>+ LockHolder locker(m_layerPoolMutex);
</ins><span class="cx"> ASSERT(m_needsPrune);
</span><span class="cx"> m_needsPrune = false;
</span><span class="cx"> unsigned shrinkTo = decayedCapacity();
</span><span class="lines">@@ -163,7 +163,7 @@
</span><span class="cx">
</span><span class="cx"> void LegacyTileLayerPool::drain()
</span><span class="cx"> {
</span><del>- MutexLocker reuseLocker(m_layerPoolMutex);
</del><ins>+ LockHolder reuseLocker(m_layerPoolMutex);
</ins><span class="cx"> m_reuseLists.clear();
</span><span class="cx"> m_sizesInPruneOrder.clear();
</span><span class="cx"> m_totalBytes = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcurlCurlDownloadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">
</span><span class="cx"> bool CurlDownloadManager::add(CURL* curlHandle)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> m_pendingHandleList.append(curlHandle);
</span><span class="cx"> startThreadIfNeeded();
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx">
</span><span class="cx"> bool CurlDownloadManager::remove(CURL* curlHandle)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> m_removedHandleList.append(curlHandle);
</span><span class="cx">
</span><span class="lines">@@ -79,13 +79,13 @@
</span><span class="cx">
</span><span class="cx"> int CurlDownloadManager::getActiveDownloadCount() const
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> return m_activeHandleList.size();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> int CurlDownloadManager::getPendingDownloadCount() const
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> return m_pendingHandleList.size();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -111,7 +111,7 @@
</span><span class="cx">
</span><span class="cx"> void CurlDownloadManager::stopThreadIfIdle()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> if (!getActiveDownloadCount() && !getPendingDownloadCount())
</span><span class="cx"> setRunThread(false);
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx">
</span><span class="cx"> void CurlDownloadManager::updateHandleList()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> // Remove curl easy handles from multi list
</span><span class="cx"> int size = m_removedHandleList.size();
</span><span class="lines">@@ -245,7 +245,7 @@
</span><span class="cx">
</span><span class="cx"> CurlDownload::~CurlDownload()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> if (m_url)
</span><span class="cx"> fastFree(m_url);
</span><span class="lines">@@ -262,7 +262,7 @@
</span><span class="cx"> if (!listener)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> m_curlHandle = curl_easy_init();
</span><span class="cx">
</span><span class="lines">@@ -295,7 +295,7 @@
</span><span class="cx"> if (!listener)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> URL url(ParsedURLString, request.url());
</span><span class="cx">
</span><span class="lines">@@ -317,25 +317,25 @@
</span><span class="cx">
</span><span class="cx"> String CurlDownload::getTempPath() const
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> return m_tempPath;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> String CurlDownload::getUrl() const
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> return String(m_url);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ResourceResponse CurlDownload::getResponse() const
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx"> return m_response;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void CurlDownload::closeFile()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> if (m_tempHandle != invalidPlatformFileHandle) {
</span><span class="cx"> WebCore::closeFile(m_tempHandle);
</span><span class="lines">@@ -390,7 +390,7 @@
</span><span class="cx">
</span><span class="cx"> void CurlDownload::didReceiveHeader(const String& header)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> if (header == "\r\n" || header == "\n") {
</span><span class="cx">
</span><span class="lines">@@ -430,7 +430,7 @@
</span><span class="cx">
</span><span class="cx"> void CurlDownload::didReceiveData(void* data, int size)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> RefPtr<CurlDownload> protectedDownload(this);
</span><span class="cx">
</span><span class="lines">@@ -464,7 +464,7 @@
</span><span class="cx">
</span><span class="cx"> void CurlDownload::didFail()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mutex);
</del><ins>+ LockHolder locker(m_mutex);
</ins><span class="cx">
</span><span class="cx"> closeFile();
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcurlCurlDownloadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/curl/CurlDownload.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/curl/CurlDownload.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/network/curl/CurlDownload.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx"> Vector<CURL*> m_pendingHandleList;
</span><span class="cx"> Vector<CURL*> m_activeHandleList;
</span><span class="cx"> Vector<CURL*> m_removedHandleList;
</span><del>- mutable Mutex m_mutex;
</del><ins>+ mutable Lock m_mutex;
</ins><span class="cx"> bool m_runThread;
</span><span class="cx"> };
</span><span class="cx">
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx"> WebCore::PlatformFileHandle m_tempHandle;
</span><span class="cx"> WebCore::ResourceResponse m_response;
</span><span class="cx"> bool m_deletesFileUponFailure;
</span><del>- mutable Mutex m_mutex;
</del><ins>+ mutable Lock m_mutex;
</ins><span class="cx"> CurlDownloadListener *m_listener;
</span><span class="cx">
</span><span class="cx"> static CurlDownloadManager m_downloadManager;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcurlResourceHandleManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -133,10 +133,11 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static Mutex* sharedResourceMutex(curl_lock_data data) {
- DEPRECATED_DEFINE_STATIC_LOCAL(Mutex, cookieMutex, ());
- DEPRECATED_DEFINE_STATIC_LOCAL(Mutex, dnsMutex, ());
- DEPRECATED_DEFINE_STATIC_LOCAL(Mutex, shareMutex, ());
</del><ins>+static Lock* sharedResourceMutex(curl_lock_data data)
+{
+ DEPRECATED_DEFINE_STATIC_LOCAL(Lock, cookieMutex, ());
+ DEPRECATED_DEFINE_STATIC_LOCAL(Lock, dnsMutex, ());
+ DEPRECATED_DEFINE_STATIC_LOCAL(Lock, shareMutex, ());
</ins><span class="cx">
</span><span class="cx"> switch (data) {
</span><span class="cx"> case CURL_LOCK_DATA_COOKIE:
</span><span class="lines">@@ -190,13 +191,13 @@
</span><span class="cx"> // cache.
</span><span class="cx"> static void curl_lock_callback(CURL* /* handle */, curl_lock_data data, curl_lock_access /* access */, void* /* userPtr */)
</span><span class="cx"> {
</span><del>- if (Mutex* mutex = sharedResourceMutex(data))
</del><ins>+ if (Lock* mutex = sharedResourceMutex(data))
</ins><span class="cx"> mutex->lock();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static void curl_unlock_callback(CURL* /* handle */, curl_lock_data data, void* /* userPtr */)
</span><span class="cx"> {
</span><del>- if (Mutex* mutex = sharedResourceMutex(data))
</del><ins>+ if (Lock* mutex = sharedResourceMutex(data))
</ins><span class="cx"> mutex->unlock();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkiosQuickLookmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/ios/QuickLook.mm (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/ios/QuickLook.mm        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/network/ios/QuickLook.mm        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -85,9 +85,9 @@
</span><span class="cx"> return dictionary;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static Mutex& qlPreviewConverterDictionaryMutex()
</del><ins>+static Lock& qlPreviewConverterDictionaryMutex()
</ins><span class="cx"> {
</span><del>- static NeverDestroyed<Mutex> mutex;
</del><ins>+ static NeverDestroyed<Lock> mutex;
</ins><span class="cx"> return mutex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(url);
</span><span class="cx"> ASSERT(converter);
</span><del>- MutexLocker lock(qlPreviewConverterDictionaryMutex());
</del><ins>+ LockHolder lock(qlPreviewConverterDictionaryMutex());
</ins><span class="cx"> [QLPreviewConverterDictionary() setObject:converter forKey:url];
</span><span class="cx"> [QLContentDictionary() setObject:(fileName ? fileName : @"") forKey:url];
</span><span class="cx"> }
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx"> {
</span><span class="cx"> id converter = nil;
</span><span class="cx"> {
</span><del>- MutexLocker lock(qlPreviewConverterDictionaryMutex());
</del><ins>+ LockHolder lock(qlPreviewConverterDictionaryMutex());
</ins><span class="cx"> converter = [QLPreviewConverterDictionary() objectForKey:url];
</span><span class="cx"> }
</span><span class="cx"> if (!converter)
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx">
</span><span class="cx"> void WebCore::removeQLPreviewConverterForURL(NSURL *url)
</span><span class="cx"> {
</span><del>- MutexLocker lock(qlPreviewConverterDictionaryMutex());
</del><ins>+ LockHolder lock(qlPreviewConverterDictionaryMutex());
</ins><span class="cx"> [QLPreviewConverterDictionary() removeObjectForKey:url];
</span><span class="cx">
</span><span class="cx"> // Delete the file when we remove the preview converter
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx"> id converter = nil;
</span><span class="cx"> NSURL *nsDocumentURL = documentURL;
</span><span class="cx"> {
</span><del>- MutexLocker lock(qlPreviewConverterDictionaryMutex());
</del><ins>+ LockHolder lock(qlPreviewConverterDictionaryMutex());
</ins><span class="cx"> converter = [QLPreviewConverterDictionary() objectForKey:nsDocumentURL];
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformsqlSQLiteDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/sql/SQLiteDatabase.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/sql/SQLiteDatabase.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/sql/SQLiteDatabase.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -120,7 +120,7 @@
</span><span class="cx"> // ASSERT(currentThread() == m_openingThread);
</span><span class="cx"> sqlite3* db = m_db;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_databaseClosingMutex);
</del><ins>+ LockHolder locker(m_databaseClosingMutex);
</ins><span class="cx"> m_db = 0;
</span><span class="cx"> }
</span><span class="cx"> sqlite3_close(db);
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx"> int64_t maxPageCount = 0;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_authorizerLock);
</del><ins>+ LockHolder locker(m_authorizerLock);
</ins><span class="cx"> enableAuthorizer(false);
</span><span class="cx"> SQLiteStatement statement(*this, ASCIILiteral("PRAGMA max_page_count"));
</span><span class="cx"> maxPageCount = statement.getColumnInt64(0);
</span><span class="lines">@@ -180,7 +180,7 @@
</span><span class="cx"> ASSERT(currentPageSize || !m_db);
</span><span class="cx"> int64_t newMaxPageCount = currentPageSize ? size / currentPageSize : 0;
</span><span class="cx">
</span><del>- MutexLocker locker(m_authorizerLock);
</del><ins>+ LockHolder locker(m_authorizerLock);
</ins><span class="cx"> enableAuthorizer(false);
</span><span class="cx">
</span><span class="cx"> SQLiteStatement statement(*this, "PRAGMA max_page_count = " + String::number(newMaxPageCount));
</span><span class="lines">@@ -197,7 +197,7 @@
</span><span class="cx"> // Since the page size of a database is locked in at creation and therefore cannot be dynamic,
</span><span class="cx"> // we can cache the value for future use
</span><span class="cx"> if (m_pageSize == -1) {
</span><del>- MutexLocker locker(m_authorizerLock);
</del><ins>+ LockHolder locker(m_authorizerLock);
</ins><span class="cx"> enableAuthorizer(false);
</span><span class="cx">
</span><span class="cx"> SQLiteStatement statement(*this, ASCIILiteral("PRAGMA page_size"));
</span><span class="lines">@@ -214,7 +214,7 @@
</span><span class="cx"> int64_t freelistCount = 0;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_authorizerLock);
</del><ins>+ LockHolder locker(m_authorizerLock);
</ins><span class="cx"> enableAuthorizer(false);
</span><span class="cx"> // Note: freelist_count was added in SQLite 3.4.1.
</span><span class="cx"> SQLiteStatement statement(*this, ASCIILiteral("PRAGMA freelist_count"));
</span><span class="lines">@@ -230,7 +230,7 @@
</span><span class="cx"> int64_t pageCount = 0;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_authorizerLock);
</del><ins>+ LockHolder locker(m_authorizerLock);
</ins><span class="cx"> enableAuthorizer(false);
</span><span class="cx"> SQLiteStatement statement(*this, ASCIILiteral("PRAGMA page_count"));
</span><span class="cx"> pageCount = statement.getColumnInt64(0);
</span><span class="lines">@@ -309,7 +309,7 @@
</span><span class="cx">
</span><span class="cx"> int SQLiteDatabase::runIncrementalVacuumCommand()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_authorizerLock);
</del><ins>+ LockHolder locker(m_authorizerLock);
</ins><span class="cx"> enableAuthorizer(false);
</span><span class="cx">
</span><span class="cx"> if (!executeCommand(ASCIILiteral("PRAGMA incremental_vacuum")))
</span><span class="lines">@@ -450,7 +450,7 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- MutexLocker locker(m_authorizerLock);
</del><ins>+ LockHolder locker(m_authorizerLock);
</ins><span class="cx">
</span><span class="cx"> m_authorizer = auth;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformsqlSQLiteDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/sql/SQLiteDatabase.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/sql/SQLiteDatabase.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/sql/SQLiteDatabase.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx">
</span><span class="cx"> #include <functional>
</span><span class="cx"> #include <sqlite3.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/Threading.h>
</span><span class="cx"> #include <wtf/text/CString.h>
</span><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="lines">@@ -106,7 +107,7 @@
</span><span class="cx">
</span><span class="cx"> void setAuthorizer(PassRefPtr<DatabaseAuthorizer>);
</span><span class="cx">
</span><del>- Mutex& databaseMutex() { return m_lockingMutex; }
</del><ins>+ Lock& databaseMutex() { return m_lockingMutex; }
</ins><span class="cx"> bool isAutoCommitOn() const;
</span><span class="cx">
</span><span class="cx"> // The SQLite AUTO_VACUUM pragma can be either NONE, FULL, or INCREMENTAL.
</span><span class="lines">@@ -147,13 +148,13 @@
</span><span class="cx"> bool m_transactionInProgress;
</span><span class="cx"> bool m_sharable;
</span><span class="cx">
</span><del>- Mutex m_authorizerLock;
</del><ins>+ Lock m_authorizerLock;
</ins><span class="cx"> RefPtr<DatabaseAuthorizer> m_authorizer;
</span><span class="cx">
</span><del>- Mutex m_lockingMutex;
</del><ins>+ Lock m_lockingMutex;
</ins><span class="cx"> ThreadIdentifier m_openingThread;
</span><span class="cx">
</span><del>- Mutex m_databaseClosingMutex;
</del><ins>+ Lock m_databaseClosingMutex;
</ins><span class="cx">
</span><span class="cx"> int m_openError;
</span><span class="cx"> CString m_openErrorMessage;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformsqlSQLiteStatementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/sql/SQLiteStatement.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/sql/SQLiteStatement.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/platform/sql/SQLiteStatement.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!m_isPrepared);
</span><span class="cx">
</span><del>- MutexLocker databaseLock(m_database.databaseMutex());
</del><ins>+ LockHolder databaseLock(m_database.databaseMutex());
</ins><span class="cx">
</span><span class="cx"> CString query = m_query.stripWhiteSpace().utf8();
</span><span class="cx">
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx">
</span><span class="cx"> int SQLiteStatement::step()
</span><span class="cx"> {
</span><del>- MutexLocker databaseLock(m_database.databaseMutex());
</del><ins>+ LockHolder databaseLock(m_database.databaseMutex());
</ins><span class="cx">
</span><span class="cx"> if (!m_statement)
</span><span class="cx"> return SQLITE_OK;
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerThread.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerThread.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/workers/WorkerThread.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx"> bool WorkerThread::start()
</span><span class="cx"> {
</span><span class="cx"> // Mutex protection is necessary to ensure that m_threadID is initialized when the thread starts.
</span><del>- MutexLocker lock(m_threadCreationMutex);
</del><ins>+ LockHolder lock(m_threadCreationMutex);
</ins><span class="cx">
</span><span class="cx"> if (m_threadID)
</span><span class="cx"> return true;
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_threadCreationMutex);
</del><ins>+ LockHolder lock(m_threadCreationMutex);
</ins><span class="cx"> m_workerGlobalScope = createWorkerGlobalScope(m_startupData->m_scriptURL, m_startupData->m_userAgent, m_startupData->m_contentSecurityPolicy, m_startupData->m_contentSecurityPolicyType, m_startupData->m_topOrigin.release());
</span><span class="cx">
</span><span class="cx"> if (m_runLoop.terminated()) {
</span><span class="lines">@@ -189,7 +189,7 @@
</span><span class="cx"> void WorkerThread::stop()
</span><span class="cx"> {
</span><span class="cx"> // Mutex protection is necessary because stop() can be called before the context is fully created.
</span><del>- MutexLocker lock(m_threadCreationMutex);
</del><ins>+ LockHolder lock(m_threadCreationMutex);
</ins><span class="cx">
</span><span class="cx"> // Ensure that tasks are being handled by thread event loop. If script execution weren't forbidden, a while(1) loop in JS could keep the thread alive forever.
</span><span class="cx"> if (m_workerGlobalScope) {
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerThreadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerThread.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerThread.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebCore/workers/WorkerThread.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx"> WorkerReportingProxy& m_workerReportingProxy;
</span><span class="cx">
</span><span class="cx"> RefPtr<WorkerGlobalScope> m_workerGlobalScope;
</span><del>- Mutex m_threadCreationMutex;
</del><ins>+ Lock m_threadCreationMutex;
</ins><span class="cx">
</span><span class="cx"> std::unique_ptr<WorkerThreadStartupData> m_startupData;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/ChangeLog        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2015-08-17 Filip Pizlo <fpizlo@apple.com>
+
+ Replace all remaining uses of WTF::Mutex with WTF::Lock
+ https://bugs.webkit.org/show_bug.cgi?id=148089
+
+ Reviewed by Geoffrey Garen.
+
+ * Storage/StorageAreaSync.cpp:
+ (WebCore::StorageAreaSync::syncTimerFired):
+ (WebCore::StorageAreaSync::markImported):
+ (WebCore::StorageAreaSync::blockUntilImportComplete):
+ (WebCore::StorageAreaSync::performSync):
+ * Storage/StorageAreaSync.h:
+ * Storage/StorageTracker.cpp:
+ (WebCore::StorageTracker::setDatabaseDirectoryPath):
+ (WebCore::StorageTracker::finishedImportingOriginIdentifiers):
+ (WebCore::StorageTracker::syncImportOriginIdentifiers):
+ (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
+ (WebCore::StorageTracker::setOriginDetails):
+ (WebCore::StorageTracker::syncSetOriginDetails):
+ (WebCore::StorageTracker::origins):
+ (WebCore::StorageTracker::deleteAllOrigins):
+ (WebCore::StorageTracker::syncDeleteAllOrigins):
+ (WebCore::StorageTracker::deleteOrigin):
+ (WebCore::StorageTracker::syncDeleteOrigin):
+ (WebCore::StorageTracker::canDeleteOrigin):
+ (WebCore::StorageTracker::cancelDeletingOrigin):
+ (WebCore::StorageTracker::diskUsageForOrigin):
+ * Storage/StorageTracker.h:
+
</ins><span class="cx"> 2015-08-17 Alex Christensen <achristensen@webkit.org>
</span><span class="cx">
</span><span class="cx"> [Win CMake] Allow WebKitLibraries directory to be set from the command line
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageAreaSynccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageAreaSync.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageAreaSync.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/Storage/StorageAreaSync.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx">
</span><span class="cx"> bool partialSync = false;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx">
</span><span class="cx"> // Do not schedule another sync if we're still trying to complete the
</span><span class="cx"> // previous one. But, if we're shutting down, schedule it anyway.
</span><span class="lines">@@ -352,9 +352,9 @@
</span><span class="cx">
</span><span class="cx"> void StorageAreaSync::markImported()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_importLock);
</del><ins>+ LockHolder locker(m_importLock);
</ins><span class="cx"> m_importComplete = true;
</span><del>- m_importCondition.signal();
</del><ins>+ m_importCondition.notifyOne();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // FIXME: In the future, we should allow use of StorageAreas while it's importing (when safe to do so).
</span><span class="lines">@@ -372,7 +372,7 @@
</span><span class="cx"> if (!m_storageArea)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_importLock);
</del><ins>+ LockHolder locker(m_importLock);
</ins><span class="cx"> while (!m_importComplete)
</span><span class="cx"> m_importCondition.wait(m_importLock);
</span><span class="cx"> m_storageArea = nullptr;
</span><span class="lines">@@ -467,7 +467,7 @@
</span><span class="cx"> bool clearItems;
</span><span class="cx"> HashMap<String, String> items;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx">
</span><span class="cx"> ASSERT(m_syncScheduled);
</span><span class="cx">
</span><span class="lines">@@ -482,7 +482,7 @@
</span><span class="cx"> sync(clearItems, items);
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncLock);
</del><ins>+ LockHolder locker(m_syncLock);
</ins><span class="cx"> m_syncInProgress = false;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageAreaSynch"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageAreaSync.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageAreaSync.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/Storage/StorageAreaSync.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx">
</span><span class="cx"> #include <WebCore/SQLiteDatabase.h>
</span><span class="cx"> #include <WebCore/Timer.h>
</span><ins>+#include <wtf/Condition.h>
</ins><span class="cx"> #include <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/text/StringHash.h>
</span><span class="cx">
</span><span class="lines">@@ -85,7 +86,7 @@
</span><span class="cx">
</span><span class="cx"> const String m_databaseIdentifier;
</span><span class="cx">
</span><del>- Mutex m_syncLock;
</del><ins>+ Lock m_syncLock;
</ins><span class="cx"> HashMap<String, String> m_itemsPendingSync;
</span><span class="cx"> bool m_clearItemsWhileSyncing;
</span><span class="cx"> bool m_syncScheduled;
</span><span class="lines">@@ -94,8 +95,8 @@
</span><span class="cx">
</span><span class="cx"> bool m_syncCloseDatabase;
</span><span class="cx">
</span><del>- mutable Mutex m_importLock;
- ThreadCondition m_importCondition;
</del><ins>+ mutable Lock m_importLock;
+ Condition m_importCondition;
</ins><span class="cx"> bool m_importComplete;
</span><span class="cx"> void markImported();
</span><span class="cx"> void migrateItemTableIfNeeded();
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageTrackercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageTracker.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageTracker.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/Storage/StorageTracker.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -100,7 +100,7 @@
</span><span class="cx">
</span><span class="cx"> void StorageTracker::setDatabaseDirectoryPath(const String& path)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx">
</span><span class="cx"> if (m_database.isOpen())
</span><span class="cx"> m_database.close();
</span><span class="lines">@@ -108,7 +108,7 @@
</span><span class="cx"> m_storageDirectoryPath = path.isolatedCopy();
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> m_originSet.clear();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -185,7 +185,7 @@
</span><span class="cx">
</span><span class="cx"> void StorageTracker::finishedImportingOriginIdentifiers()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx"> if (m_client)
</span><span class="cx"> m_client->didFinishLoadingOrigins();
</span><span class="cx"> }
</span><span class="lines">@@ -197,7 +197,7 @@
</span><span class="cx"> ASSERT(!isMainThread());
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx">
</span><span class="cx"> // Don't force creation of StorageTracker's db just because a tracker
</span><span class="cx"> // was initialized. It will be created if local storage dbs are found
</span><span class="lines">@@ -217,7 +217,7 @@
</span><span class="cx"> int result;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker lockOrigins(m_originSetMutex);
</del><ins>+ LockHolder lockOrigins(m_originSetMutex);
</ins><span class="cx"> while ((result = statement.step()) == SQLITE_ROW)
</span><span class="cx"> m_originSet.add(statement.getColumnText(0).isolatedCopy());
</span><span class="cx"> }
</span><span class="lines">@@ -232,10 +232,10 @@
</span><span class="cx"> syncFileSystemAndTrackerDatabase();
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_clientMutex);
</del><ins>+ LockHolder locker(m_clientMutex);
</ins><span class="cx">
</span><span class="cx"> if (m_client) {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> OriginSet::const_iterator end = m_originSet.end();
</span><span class="cx"> for (OriginSet::const_iterator it = m_originSet.begin(); it != end; ++it)
</span><span class="cx"> m_client->dispatchDidModifyOrigin(*it);
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx">
</span><span class="cx"> Vector<String> paths;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx"> paths = listDirectory(m_storageDirectoryPath, "*.localstorage");
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -265,7 +265,7 @@
</span><span class="cx"> // deletions from disk and from m_originSet.
</span><span class="cx"> OriginSet originSetCopy;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> for (OriginSet::const_iterator it = m_originSet.begin(), end = m_originSet.end(); it != end; ++it)
</span><span class="cx"> originSetCopy.add((*it).isolatedCopy());
</span><span class="cx"> }
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx">
</span><span class="cx"> if (m_originSet.contains(originIdentifier))
</span><span class="cx"> return;
</span><span class="lines">@@ -337,7 +337,7 @@
</span><span class="cx">
</span><span class="cx"> SQLiteTransactionInProgressAutoCounter transactionCounter;
</span><span class="cx">
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx">
</span><span class="cx"> openTrackerDatabase(true);
</span><span class="cx">
</span><span class="lines">@@ -357,13 +357,13 @@
</span><span class="cx"> LOG_ERROR("Unable to establish origin '%s' in the tracker", originIdentifier.ascii().data());
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> if (!m_originSet.contains(originIdentifier))
</span><span class="cx"> m_originSet.add(originIdentifier);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_clientMutex);
</del><ins>+ LockHolder locker(m_clientMutex);
</ins><span class="cx"> if (m_client)
</span><span class="cx"> m_client->dispatchDidModifyOrigin(originIdentifier);
</span><span class="cx"> }
</span><span class="lines">@@ -376,7 +376,7 @@
</span><span class="cx"> if (!m_isActive)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx">
</span><span class="cx"> for (OriginSet::const_iterator it = m_originSet.begin(), end = m_originSet.end(); it != end; ++it)
</span><span class="cx"> result.append(SecurityOrigin::createFromDatabaseIdentifier(*it));
</span><span class="lines">@@ -392,7 +392,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> willDeleteAllOrigins();
</span><span class="cx"> m_originSet.clear();
</span><span class="cx"> }
</span><span class="lines">@@ -417,7 +417,7 @@
</span><span class="cx">
</span><span class="cx"> SQLiteTransactionInProgressAutoCounter transactionCounter;
</span><span class="cx">
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx">
</span><span class="cx"> openTrackerDatabase(false);
</span><span class="cx"> if (!m_database.isOpen())
</span><span class="lines">@@ -437,7 +437,7 @@
</span><span class="cx"> deleteFile(statement.getColumnText(1));
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_clientMutex);
</del><ins>+ LockHolder locker(m_clientMutex);
</ins><span class="cx"> if (m_client)
</span><span class="cx"> m_client->dispatchDidModifyOrigin(statement.getColumnText(0));
</span><span class="cx"> }
</span><span class="lines">@@ -499,7 +499,7 @@
</span><span class="cx"> String originId = origin->databaseIdentifier();
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> willDeleteOrigin(originId);
</span><span class="cx"> m_originSet.remove(originId);
</span><span class="cx"> }
</span><span class="lines">@@ -516,7 +516,7 @@
</span><span class="cx">
</span><span class="cx"> SQLiteTransactionInProgressAutoCounter transactionCounter;
</span><span class="cx">
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx">
</span><span class="cx"> if (!canDeleteOrigin(originIdentifier)) {
</span><span class="cx"> LOG_ERROR("Attempted to delete origin '%s' while it was being created\n", originIdentifier.ascii().data());
</span><span class="lines">@@ -549,7 +549,7 @@
</span><span class="cx">
</span><span class="cx"> bool shouldDeleteTrackerFiles = false;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> m_originSet.remove(originIdentifier);
</span><span class="cx"> shouldDeleteTrackerFiles = m_originSet.isEmpty();
</span><span class="cx"> }
</span><span class="lines">@@ -566,7 +566,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_clientMutex);
</del><ins>+ LockHolder locker(m_clientMutex);
</ins><span class="cx"> if (m_client)
</span><span class="cx"> m_client->dispatchDidModifyOrigin(originIdentifier);
</span><span class="cx"> }
</span><span class="lines">@@ -592,7 +592,7 @@
</span><span class="cx"> bool StorageTracker::canDeleteOrigin(const String& originIdentifier)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseMutex.tryLock());
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> return m_originsBeingDeleted.contains(originIdentifier);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -601,9 +601,9 @@
</span><span class="cx"> if (!m_isActive)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx"> {
</span><del>- MutexLocker locker(m_originSetMutex);
</del><ins>+ LockHolder locker(m_originSetMutex);
</ins><span class="cx"> if (!m_originsBeingDeleted.isEmpty())
</span><span class="cx"> m_originsBeingDeleted.remove(originIdentifier);
</span><span class="cx"> }
</span><span class="lines">@@ -647,7 +647,7 @@
</span><span class="cx"> if (!m_isActive)
</span><span class="cx"> return 0;
</span><span class="cx">
</span><del>- MutexLocker locker(m_databaseMutex);
</del><ins>+ LockHolder locker(m_databaseMutex);
</ins><span class="cx">
</span><span class="cx"> String path = databasePathForOrigin(origin->databaseIdentifier());
</span><span class="cx"> if (path.isEmpty())
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageTrackerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageTracker.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageTracker.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/Storage/StorageTracker.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -95,15 +95,15 @@
</span><span class="cx"> void syncImportOriginIdentifiers();
</span><span class="cx">
</span><span class="cx"> // Mutex for m_database and m_storageDirectoryPath.
</span><del>- Mutex m_databaseMutex;
</del><ins>+ Lock m_databaseMutex;
</ins><span class="cx"> SQLiteDatabase m_database;
</span><span class="cx"> String m_storageDirectoryPath;
</span><span class="cx">
</span><del>- Mutex m_clientMutex;
</del><ins>+ Lock m_clientMutex;
</ins><span class="cx"> StorageTrackerClient* m_client;
</span><span class="cx">
</span><span class="cx"> // Guard for m_originSet and m_originsBeingDeleted.
</span><del>- Mutex m_originSetMutex;
</del><ins>+ Lock m_originSetMutex;
</ins><span class="cx"> typedef HashSet<String> OriginSet;
</span><span class="cx"> OriginSet m_originSet;
</span><span class="cx"> OriginSet m_originsBeingDeleted;
</span></span></pre></div>
<a id="trunkSourceWebKitiosChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ios/ChangeLog (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ios/ChangeLog        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/ios/ChangeLog        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-08-17 Filip Pizlo <fpizlo@apple.com>
+
+ Replace all remaining uses of WTF::Mutex with WTF::Lock
+ https://bugs.webkit.org/show_bug.cgi?id=148089
+
+ Reviewed by Geoffrey Garen.
+
+ * WebCoreSupport/WebFixedPositionContent.mm:
+ (WebFixedPositionContentDataLock):
+ (-[WebFixedPositionContent scrollOrZoomChanged:]):
+ (-[WebFixedPositionContent overflowScrollPositionForLayer:changedTo:]):
+ (-[WebFixedPositionContent setViewportConstrainedLayers:stickyContainerMap:]):
+ (-[WebFixedPositionContent hasFixedOrStickyPositionLayers]):
+ (-[WebFixedPositionContent minimumOffsetFromFixedPositionLayersToAnchorEdge:ofRect:inLayer:]):
+
</ins><span class="cx"> 2015-08-13 Tim Horton <timothy_horton@apple.com>
</span><span class="cx">
</span><span class="cx"> Refactor and improve TextIndicator to prepare for tests
</span></span></pre></div>
<a id="trunkSourceWebKitiosWebCoreSupportWebFixedPositionContentmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ios/WebCoreSupport/WebFixedPositionContent.mm (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ios/WebCoreSupport/WebFixedPositionContent.mm        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/ios/WebCoreSupport/WebFixedPositionContent.mm        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -48,9 +48,9 @@
</span><span class="cx"> using namespace WebCore;
</span><span class="cx"> using namespace std;
</span><span class="cx">
</span><del>-static Mutex& WebFixedPositionContentDataLock()
</del><ins>+static Lock& WebFixedPositionContentDataLock()
</ins><span class="cx"> {
</span><del>- DEPRECATED_DEFINE_STATIC_LOCAL(Mutex, mutex, ());
</del><ins>+ DEPRECATED_DEFINE_STATIC_LOCAL(Lock, mutex, ());
</ins><span class="cx"> return mutex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx">
</span><span class="cx"> - (void)scrollOrZoomChanged:(CGRect)positionedObjectsRect
</span><span class="cx"> {
</span><del>- MutexLocker lock(WebFixedPositionContentDataLock());
</del><ins>+ LockHolder lock(WebFixedPositionContentDataLock());
</ins><span class="cx">
</span><span class="cx"> LayerInfoMap::const_iterator end = _private->m_viewportConstrainedLayers.end();
</span><span class="cx"> for (LayerInfoMap::const_iterator it = _private->m_viewportConstrainedLayers.begin(); it != end; ++it) {
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx">
</span><span class="cx"> - (void)overflowScrollPositionForLayer:(CALayer *)scrollLayer changedTo:(CGPoint)scrollPosition
</span><span class="cx"> {
</span><del>- MutexLocker lock(WebFixedPositionContentDataLock());
</del><ins>+ LockHolder lock(WebFixedPositionContentDataLock());
</ins><span class="cx">
</span><span class="cx"> LayerInfoMap::const_iterator end = _private->m_viewportConstrainedLayers.end();
</span><span class="cx"> for (LayerInfoMap::const_iterator it = _private->m_viewportConstrainedLayers.begin(); it != end; ++it) {
</span><span class="lines">@@ -173,7 +173,7 @@
</span><span class="cx">
</span><span class="cx"> - (void)setViewportConstrainedLayers:(WTF::HashMap<CALayer *, std::unique_ptr<WebCore::ViewportConstraints>>&)layerMap stickyContainerMap:(WTF::HashMap<CALayer*, CALayer*>&)stickyContainers
</span><span class="cx"> {
</span><del>- MutexLocker lock(WebFixedPositionContentDataLock());
</del><ins>+ LockHolder lock(WebFixedPositionContentDataLock());
</ins><span class="cx">
</span><span class="cx"> _private->m_viewportConstrainedLayers.clear();
</span><span class="cx">
</span><span class="lines">@@ -190,7 +190,7 @@
</span><span class="cx">
</span><span class="cx"> - (BOOL)hasFixedOrStickyPositionLayers
</span><span class="cx"> {
</span><del>- MutexLocker lock(WebFixedPositionContentDataLock());
</del><ins>+ LockHolder lock(WebFixedPositionContentDataLock());
</ins><span class="cx"> return !_private->m_viewportConstrainedLayers.isEmpty();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -210,7 +210,7 @@
</span><span class="cx">
</span><span class="cx"> - (CGFloat)minimumOffsetFromFixedPositionLayersToAnchorEdge:(WebFixedPositionAnchorEdge)anchorEdge ofRect:(CGRect)rect inLayer:(CALayer *)layer
</span><span class="cx"> {
</span><del>- MutexLocker lock(WebFixedPositionContentDataLock());
</del><ins>+ LockHolder lock(WebFixedPositionContentDataLock());
</ins><span class="cx"> ViewportConstraints::AnchorEdgeFlags anchorEdgeFlags = anchorEdgeFlagsForAnchorEdge(anchorEdge);
</span><span class="cx"> CGFloat minimumOffset = CGFLOAT_MAX;
</span><span class="cx"> LayerInfoMap::const_iterator end = _private->m_viewportConstrainedLayers.end();
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/mac/ChangeLog        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2015-08-17 Filip Pizlo <fpizlo@apple.com>
+
+ Replace all remaining uses of WTF::Mutex with WTF::Lock
+ https://bugs.webkit.org/show_bug.cgi?id=148089
+
+ Reviewed by Geoffrey Garen.
+
+ * Storage/WebDatabaseManager.mm:
+ (transactionBackgroundTaskIdentifierLock):
+ (+[WebDatabaseManager startBackgroundTask]):
+ (+[WebDatabaseManager endBackgroundTask]):
+ * WebView/WebView.mm:
+ (-[WebView _synchronizeCustomFixedPositionLayoutRect]):
+ (-[WebView _setCustomFixedPositionLayoutRectInWebThread:synchronize:]):
+ (-[WebView _setCustomFixedPositionLayoutRect:]):
+ (-[WebView _fetchCustomFixedPositionLayoutRect:]):
+ * WebView/WebViewData.h:
+
</ins><span class="cx"> 2015-08-17 Jeff Miller <jeffm@apple.com>
</span><span class="cx">
</span><span class="cx"> Add a method to WebInspector to indicate whether the inspector is open
</span></span></pre></div>
<a id="trunkSourceWebKitmacStorageWebDatabaseManagermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Storage/WebDatabaseManager.mm (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Storage/WebDatabaseManager.mm        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/mac/Storage/WebDatabaseManager.mm        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -226,9 +226,9 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> @implementation WebDatabaseManager (WebDatabaseManagerInternal)
</span><span class="cx">
</span><del>-static Mutex& transactionBackgroundTaskIdentifierLock()
</del><ins>+static Lock& transactionBackgroundTaskIdentifierLock()
</ins><span class="cx"> {
</span><del>- DEPRECATED_DEFINE_STATIC_LOCAL(Mutex, mutex, ());
</del><ins>+ DEPRECATED_DEFINE_STATIC_LOCAL(Lock, mutex, ());
</ins><span class="cx"> return mutex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -261,7 +261,7 @@
</span><span class="cx">
</span><span class="cx"> + (void)startBackgroundTask
</span><span class="cx"> {
</span><del>- MutexLocker lock(transactionBackgroundTaskIdentifierLock());
</del><ins>+ LockHolder lock(transactionBackgroundTaskIdentifierLock());
</ins><span class="cx">
</span><span class="cx"> // If there's already an existing background task going on, there's no need to start a new one.
</span><span class="cx"> if (getTransactionBackgroundTaskIdentifier() != invalidWebBackgroundTaskIdentifier())
</span><span class="lines">@@ -275,7 +275,7 @@
</span><span class="cx">
</span><span class="cx"> + (void)endBackgroundTask
</span><span class="cx"> {
</span><del>- MutexLocker lock(transactionBackgroundTaskIdentifierLock());
</del><ins>+ LockHolder lock(transactionBackgroundTaskIdentifierLock());
</ins><span class="cx">
</span><span class="cx"> // It is possible that we were unable to start the background task when the first transaction began.
</span><span class="cx"> // Don't try to end the task in that case.
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebView.mm        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -3632,7 +3632,7 @@
</span><span class="cx">
</span><span class="cx"> IntRect newRect;
</span><span class="cx"> {
</span><del>- MutexLocker locker(_private->pendingFixedPositionLayoutRectMutex);
</del><ins>+ LockHolder locker(_private->pendingFixedPositionLayoutRectMutex);
</ins><span class="cx"> if (CGRectIsNull(_private->pendingFixedPositionLayoutRect))
</span><span class="cx"> return;
</span><span class="cx"> newRect = enclosingIntRect(_private->pendingFixedPositionLayoutRect);
</span><span class="lines">@@ -3646,7 +3646,7 @@
</span><span class="cx"> - (void)_setCustomFixedPositionLayoutRectInWebThread:(CGRect)rect synchronize:(BOOL)synchronize
</span><span class="cx"> {
</span><span class="cx"> {
</span><del>- MutexLocker locker(_private->pendingFixedPositionLayoutRectMutex);
</del><ins>+ LockHolder locker(_private->pendingFixedPositionLayoutRectMutex);
</ins><span class="cx"> _private->pendingFixedPositionLayoutRect = rect;
</span><span class="cx"> }
</span><span class="cx"> if (!synchronize)
</span><span class="lines">@@ -3660,7 +3660,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(WebThreadIsLocked());
</span><span class="cx"> {
</span><del>- MutexLocker locker(_private->pendingFixedPositionLayoutRectMutex);
</del><ins>+ LockHolder locker(_private->pendingFixedPositionLayoutRectMutex);
</ins><span class="cx"> _private->pendingFixedPositionLayoutRect = rect;
</span><span class="cx"> }
</span><span class="cx"> [self _synchronizeCustomFixedPositionLayoutRect];
</span><span class="lines">@@ -3668,7 +3668,7 @@
</span><span class="cx">
</span><span class="cx"> - (BOOL)_fetchCustomFixedPositionLayoutRect:(NSRect*)rect
</span><span class="cx"> {
</span><del>- MutexLocker locker(_private->pendingFixedPositionLayoutRectMutex);
</del><ins>+ LockHolder locker(_private->pendingFixedPositionLayoutRectMutex);
</ins><span class="cx"> if (CGRectIsNull(_private->pendingFixedPositionLayoutRect))
</span><span class="cx"> return false;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebViewData.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebViewData.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/mac/WebView/WebViewData.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #import <WebCore/LayerFlushSchedulerClient.h>
</span><span class="cx"> #import <WebCore/WebCoreKeyboardUIMode.h>
</span><span class="cx"> #import <wtf/HashMap.h>
</span><ins>+#import <wtf/Lock.h>
</ins><span class="cx"> #import <wtf/RetainPtr.h>
</span><span class="cx"> #import <wtf/ThreadingPrimitives.h>
</span><span class="cx"> #import <wtf/text/WTFString.h>
</span><span class="lines">@@ -249,7 +250,7 @@
</span><span class="cx"> CGSize fixedLayoutSize;
</span><span class="cx"> BOOL mainViewIsScrollingOrZooming;
</span><span class="cx"> int32_t didDrawTiles;
</span><del>- WTF::Mutex pendingFixedPositionLayoutRectMutex;
</del><ins>+ WTF::Lock pendingFixedPositionLayoutRectMutex;
</ins><span class="cx"> CGRect pendingFixedPositionLayoutRect;
</span><span class="cx"> #endif
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKitwinChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/ChangeLog (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/ChangeLog        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/win/ChangeLog        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2015-08-17 Filip Pizlo <fpizlo@apple.com>
+
+ Replace all remaining uses of WTF::Mutex with WTF::Lock
+ https://bugs.webkit.org/show_bug.cgi?id=148089
+
+ Reviewed by Geoffrey Garen.
+
+ * Plugins/PluginMainThreadScheduler.cpp:
+ (WebCore::PluginMainThreadScheduler::scheduleCall):
+ (WebCore::PluginMainThreadScheduler::registerPlugin):
+ (WebCore::PluginMainThreadScheduler::unregisterPlugin):
+ (WebCore::PluginMainThreadScheduler::dispatchCallsForPlugin):
+ * Plugins/PluginMainThreadScheduler.h:
+ * WebIconDatabase.cpp:
+ (WebIconDatabase::didRemoveAllIcons):
+ (WebIconDatabase::didImportIconURLForPageURL):
+ (WebIconDatabase::deliverNotifications):
+ * WebIconDatabase.h:
+ * WebLocalizableStrings.cpp:
+ (mainBundleLocStrings):
+ (frameworkLocStringsMutex):
+ (findCachedString):
+ (cacheString):
+
</ins><span class="cx"> 2015-08-17 Per Arne Vollan <peavo@outlook.com>
</span><span class="cx">
</span><span class="cx"> [WinCairo] Accelerated compositing does not respect device scale factor.
</span></span></pre></div>
<a id="trunkSourceWebKitwinPluginsPluginMainThreadSchedulercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/Plugins/PluginMainThreadScheduler.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/Plugins/PluginMainThreadScheduler.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/win/Plugins/PluginMainThreadScheduler.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">
</span><span class="cx"> void PluginMainThreadScheduler::scheduleCall(NPP npp, MainThreadFunction function, void* userData)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_queueMutex);
</del><ins>+ LockHolder lock(m_queueMutex);
</ins><span class="cx">
</span><span class="cx"> CallQueueMap::iterator it = m_callQueueMap.find(npp);
</span><span class="cx"> if (it == m_callQueueMap.end())
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">
</span><span class="cx"> void PluginMainThreadScheduler::registerPlugin(NPP npp)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_queueMutex);
</del><ins>+ LockHolder lock(m_queueMutex);
</ins><span class="cx">
</span><span class="cx"> ASSERT(!m_callQueueMap.contains(npp));
</span><span class="cx"> m_callQueueMap.set(npp, Deque<Call>());
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">
</span><span class="cx"> void PluginMainThreadScheduler::unregisterPlugin(NPP npp)
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_queueMutex);
</del><ins>+ LockHolder lock(m_queueMutex);
</ins><span class="cx">
</span><span class="cx"> ASSERT(m_callQueueMap.contains(npp));
</span><span class="cx"> m_callQueueMap.remove(npp);
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx"> for (auto& call : calls) {
</span><span class="cx"> // Check if the plug-in has been destroyed.
</span><span class="cx"> {
</span><del>- MutexLocker lock(m_queueMutex);
</del><ins>+ LockHolder lock(m_queueMutex);
</ins><span class="cx"> if (!m_callQueueMap.contains(npp))
</span><span class="cx"> return;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKitwinPluginsPluginMainThreadSchedulerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/Plugins/PluginMainThreadScheduler.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/Plugins/PluginMainThreadScheduler.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/win/Plugins/PluginMainThreadScheduler.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx">
</span><span class="cx"> #include <wtf/Deque.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/MainThread.h>
</span><span class="cx"> #include <wtf/Threading.h>
</span><span class="cx">
</span><span class="lines">@@ -79,7 +80,7 @@
</span><span class="cx">
</span><span class="cx"> bool m_callPending;
</span><span class="cx"> CallQueueMap m_callQueueMap;
</span><del>- Mutex m_queueMutex;
</del><ins>+ Lock m_queueMutex;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebIconDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebIconDatabase.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebIconDatabase.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/win/WebIconDatabase.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -320,14 +320,14 @@
</span><span class="cx"> void WebIconDatabase::didRemoveAllIcons()
</span><span class="cx"> {
</span><span class="cx"> // Queueing the empty string is a special way of saying "this queued notification is the didRemoveAllIcons notification"
</span><del>- MutexLocker locker(m_notificationMutex);
</del><ins>+ LockHolder locker(m_notificationMutex);
</ins><span class="cx"> m_notificationQueue.append(String());
</span><span class="cx"> scheduleNotificationDelivery();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebIconDatabase::didImportIconURLForPageURL(const WTF::String& pageURL)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_notificationMutex);
</del><ins>+ LockHolder locker(m_notificationMutex);
</ins><span class="cx"> m_notificationQueue.append(pageURL.isolatedCopy());
</span><span class="cx"> scheduleNotificationDelivery();
</span><span class="cx"> }
</span><span class="lines">@@ -403,7 +403,7 @@
</span><span class="cx">
</span><span class="cx"> Vector<String> queue;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_sharedWebIconDatabase->m_notificationMutex);
</del><ins>+ LockHolder locker(m_sharedWebIconDatabase->m_notificationMutex);
</ins><span class="cx"> queue.swap(m_sharedWebIconDatabase->m_notificationQueue);
</span><span class="cx"> m_sharedWebIconDatabase->m_deliveryRequested = false;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebIconDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebIconDatabase.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebIconDatabase.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/win/WebIconDatabase.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -31,8 +31,9 @@
</span><span class="cx"> #include <WebCore/IconDatabaseClient.h>
</span><span class="cx"> #include <WebCore/IntSize.h>
</span><span class="cx"> #include <WebCore/IntSizeHash.h>
</span><ins>+#include <wtf/Lock.h>
+#include <wtf/Threading.h>
</ins><span class="cx"> #include <wtf/Vector.h>
</span><del>-#include <wtf/Threading.h>
</del><span class="cx">
</span><span class="cx"> #include <windows.h>
</span><span class="cx">
</span><span class="lines">@@ -116,7 +117,7 @@
</span><span class="cx"> HashMap<IntSize, HBITMAP> m_defaultIconMap;
</span><span class="cx"> HashMap<IntSize, HBITMAP> m_sharedIconMap;
</span><span class="cx">
</span><del>- Mutex m_notificationMutex;
</del><ins>+ Lock m_notificationMutex;
</ins><span class="cx"> Vector<String> m_notificationQueue;
</span><span class="cx"> void scheduleNotificationDelivery();
</span><span class="cx"> bool m_deliveryRequested;
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebLocalizableStringscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebLocalizableStrings.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebLocalizableStrings.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit/win/WebLocalizableStrings.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx">
</span><span class="cx"> #include <wtf/Assertions.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/RetainPtr.h>
</span><span class="cx"> #include <wtf/StdLibExtras.h>
</span><span class="cx"> #include <wtf/ThreadingPrimitives.h>
</span><span class="lines">@@ -44,9 +45,9 @@
</span><span class="cx">
</span><span class="cx"> typedef HashMap<String, LocalizedString*> LocalizedStringMap;
</span><span class="cx">
</span><del>-static Mutex& mainBundleLocStringsMutex()
</del><ins>+static Lock& mainBundleLocStringsMutex()
</ins><span class="cx"> {
</span><del>- DEPRECATED_DEFINE_STATIC_LOCAL(Mutex, mutex, ());
</del><ins>+ DEPRECATED_DEFINE_STATIC_LOCAL(Lock, mutex, ());
</ins><span class="cx"> return mutex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -56,9 +57,9 @@
</span><span class="cx"> return map;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static Mutex& frameworkLocStringsMutex()
</del><ins>+static Lock& frameworkLocStringsMutex()
</ins><span class="cx"> {
</span><del>- DEPRECATED_DEFINE_STATIC_LOCAL(Mutex, mutex, ());
</del><ins>+ DEPRECATED_DEFINE_STATIC_LOCAL(Lock, mutex, ());
</ins><span class="cx"> return mutex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -175,12 +176,12 @@
</span><span class="cx"> static LocalizedString* findCachedString(WebLocalizableStringsBundle* stringsBundle, const String& key)
</span><span class="cx"> {
</span><span class="cx"> if (!stringsBundle) {
</span><del>- MutexLocker lock(mainBundleLocStringsMutex());
</del><ins>+ LockHolder lock(mainBundleLocStringsMutex());
</ins><span class="cx"> return mainBundleLocStrings().get(key);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (stringsBundle->bundle == WebKitLocalizableStringsBundle.bundle) {
</span><del>- MutexLocker lock(frameworkLocStringsMutex());
</del><ins>+ LockHolder lock(frameworkLocStringsMutex());
</ins><span class="cx"> return frameworkLocStrings().get(key);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -190,12 +191,12 @@
</span><span class="cx"> static void cacheString(WebLocalizableStringsBundle* stringsBundle, const String& key, LocalizedString* value)
</span><span class="cx"> {
</span><span class="cx"> if (!stringsBundle) {
</span><del>- MutexLocker lock(mainBundleLocStringsMutex());
</del><ins>+ LockHolder lock(mainBundleLocStringsMutex());
</ins><span class="cx"> mainBundleLocStrings().set(key, value);
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- MutexLocker lock(frameworkLocStringsMutex());
</del><ins>+ LockHolder lock(frameworkLocStringsMutex());
</ins><span class="cx"> frameworkLocStrings().set(key, value);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/ChangeLog        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,3 +1,59 @@
</span><ins>+2015-08-17 Filip Pizlo <fpizlo@apple.com>
+
+ Replace all remaining uses of WTF::Mutex with WTF::Lock
+ https://bugs.webkit.org/show_bug.cgi?id=148089
+
+ Reviewed by Geoffrey Garen.
+
+ * DatabaseProcess/DatabaseProcess.cpp:
+ (WebKit::DatabaseProcess::postDatabaseTask):
+ (WebKit::DatabaseProcess::performNextDatabaseTask):
+ * DatabaseProcess/DatabaseProcess.h:
+ * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
+ (WebKit::UniqueIDBDatabase::shutdown):
+ (WebKit::UniqueIDBDatabase::postMainThreadTask):
+ (WebKit::UniqueIDBDatabase::performNextMainThreadTask):
+ (WebKit::UniqueIDBDatabase::postDatabaseTask):
+ (WebKit::UniqueIDBDatabase::performNextDatabaseTask):
+ * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
+ * Platform/IPC/Connection.cpp:
+ (IPC::Connection::sendSyncMessage):
+ (IPC::Connection::sendSyncMessageFromSecondaryThread):
+ (IPC::Connection::waitForSyncReply):
+ (IPC::Connection::processIncomingSyncReply):
+ (IPC::Connection::connectionDidClose):
+ * Platform/IPC/Connection.h:
+ * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
+ (WebKit::CoordinatedGraphicsScene::appendUpdate):
+ * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
+ * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
+ (WebKit::ThreadedCompositor::createCompositingThread):
+ (WebKit::ThreadedCompositor::runCompositingThread):
+ (WebKit::ThreadedCompositor::terminateCompositingThread):
+ * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
+ * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
+ (WebKit::CustomProtocolManager::addCustomProtocol):
+ (WebKit::CustomProtocolManager::removeCustomProtocol):
+ (WebKit::CustomProtocolManager::registerScheme):
+ (WebKit::CustomProtocolManager::unregisterScheme):
+ (WebKit::CustomProtocolManager::supportsScheme):
+ (WebKit::CustomProtocolManager::protocolForID):
+ * Shared/Network/CustomProtocols/CustomProtocolManager.h:
+ * Shared/linux/SeccompFilters/SeccompBroker.cpp:
+ * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
+ (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
+ (WebKit::PluginProcessConnectionManager::removePluginProcessConnection):
+ (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
+ * WebProcess/Plugins/PluginProcessConnectionManager.h:
+ * WebProcess/WebPage/EventDispatcher.cpp:
+ (WebKit::EventDispatcher::addScrollingTreeForPage):
+ (WebKit::EventDispatcher::removeScrollingTreeForPage):
+ (WebKit::EventDispatcher::wheelEvent):
+ * WebProcess/WebPage/EventDispatcher.h:
+ * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
+ (webkitSoupRequestInputStreamReadAsync):
+ (webkitSoupRequestInputStreamAddData):
+
</ins><span class="cx"> 2015-08-17 Alex Christensen <achristensen@webkit.org>
</span><span class="cx">
</span><span class="cx"> Speculative GTK build fix after r188553
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessDatabaseProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(RunLoop::isMain());
</span><span class="cx">
</span><del>- MutexLocker locker(m_databaseTaskMutex);
</del><ins>+ LockHolder locker(m_databaseTaskMutex);
</ins><span class="cx">
</span><span class="cx"> m_databaseTasks.append(WTF::move(task));
</span><span class="cx">
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<AsyncTask> task;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_databaseTaskMutex);
</del><ins>+ LockHolder locker(m_databaseTaskMutex);
</ins><span class="cx"> ASSERT(!m_databaseTasks.isEmpty());
</span><span class="cx"> task = m_databaseTasks.takeFirst();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessDatabaseProcessh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -106,7 +106,7 @@
</span><span class="cx"> HashMap<UniqueIDBDatabaseIdentifier, RefPtr<UniqueIDBDatabase>> m_idbDatabases;
</span><span class="cx">
</span><span class="cx"> Deque<std::unique_ptr<AsyncTask>> m_databaseTasks;
</span><del>- Mutex m_databaseTaskMutex;
</del><ins>+ Lock m_databaseTaskMutex;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessIndexedDBUniqueIDBDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx"> ref();
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_databaseTaskMutex);
</del><ins>+ LockHolder locker(m_databaseTaskMutex);
</ins><span class="cx"> m_databaseTasks.clear();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1125,7 +1125,7 @@
</span><span class="cx"> if (!m_acceptingNewRequests && taskType == DatabaseTaskType::Normal)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_mainThreadTaskMutex);
</del><ins>+ LockHolder locker(m_mainThreadTaskMutex);
</ins><span class="cx">
</span><span class="cx"> m_mainThreadTasks.append(WTF::move(task));
</span><span class="cx">
</span><span class="lines">@@ -1143,7 +1143,7 @@
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<AsyncTask> task;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_mainThreadTaskMutex);
</del><ins>+ LockHolder locker(m_mainThreadTaskMutex);
</ins><span class="cx">
</span><span class="cx"> // This database might be shutting down, in which case the task queue might be empty.
</span><span class="cx"> if (m_mainThreadTasks.isEmpty())
</span><span class="lines">@@ -1165,7 +1165,7 @@
</span><span class="cx"> if (!m_acceptingNewRequests && taskType == DatabaseTaskType::Normal)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_databaseTaskMutex);
</del><ins>+ LockHolder locker(m_databaseTaskMutex);
</ins><span class="cx">
</span><span class="cx"> m_databaseTasks.append(WTF::move(task));
</span><span class="cx">
</span><span class="lines">@@ -1186,7 +1186,7 @@
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<AsyncTask> task;
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_databaseTaskMutex);
</del><ins>+ LockHolder locker(m_databaseTaskMutex);
</ins><span class="cx">
</span><span class="cx"> // This database might be shutting down on the main thread, in which case the task queue might be empty.
</span><span class="cx"> if (m_databaseTasks.isEmpty())
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessIndexedDBUniqueIDBDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -210,10 +210,10 @@
</span><span class="cx"> RefPtr<UniqueIDBDatabaseBackingStore> m_backingStore;
</span><span class="cx">
</span><span class="cx"> Deque<std::unique_ptr<AsyncTask>> m_databaseTasks;
</span><del>- Mutex m_databaseTaskMutex;
</del><ins>+ Lock m_databaseTaskMutex;
</ins><span class="cx">
</span><span class="cx"> Deque<std::unique_ptr<AsyncTask>> m_mainThreadTasks;
</span><del>- Mutex m_mainThreadTaskMutex;
</del><ins>+ Lock m_mainThreadTaskMutex;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/Connection.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/Connection.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Platform/IPC/Connection.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -459,7 +459,7 @@
</span><span class="cx">
</span><span class="cx"> // Push the pending sync reply information on our stack.
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncReplyStateMutex);
</del><ins>+ LockHolder locker(m_syncReplyStateMutex);
</ins><span class="cx"> if (!m_shouldWaitForSyncReplies) {
</span><span class="cx"> didFailToSendSyncMessage();
</span><span class="cx"> return nullptr;
</span><span class="lines">@@ -486,7 +486,7 @@
</span><span class="cx">
</span><span class="cx"> // Finally, pop the pending sync reply information.
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncReplyStateMutex);
</del><ins>+ LockHolder locker(m_syncReplyStateMutex);
</ins><span class="cx"> ASSERT(m_pendingSyncReplies.last().syncRequestID == syncRequestID);
</span><span class="cx"> m_pendingSyncReplies.removeLast();
</span><span class="cx"> }
</span><span class="lines">@@ -508,7 +508,7 @@
</span><span class="cx">
</span><span class="cx"> // Push the pending sync reply information on our stack.
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncReplyStateMutex);
</del><ins>+ LockHolder locker(m_syncReplyStateMutex);
</ins><span class="cx"> if (!m_shouldWaitForSyncReplies)
</span><span class="cx"> return nullptr;
</span><span class="cx">
</span><span class="lines">@@ -526,7 +526,7 @@
</span><span class="cx">
</span><span class="cx"> // Finally, pop the pending sync reply information.
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncReplyStateMutex);
</del><ins>+ LockHolder locker(m_syncReplyStateMutex);
</ins><span class="cx"> ASSERT(m_secondaryThreadPendingSyncReplyMap.contains(syncRequestID));
</span><span class="cx"> m_secondaryThreadPendingSyncReplyMap.remove(syncRequestID);
</span><span class="cx"> }
</span><span class="lines">@@ -546,7 +546,7 @@
</span><span class="cx"> SyncMessageState::singleton().dispatchMessages(nullptr);
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncReplyStateMutex);
</del><ins>+ LockHolder locker(m_syncReplyStateMutex);
</ins><span class="cx">
</span><span class="cx"> // Second, check if there is a sync reply at the top of the stack.
</span><span class="cx"> ASSERT(!m_pendingSyncReplies.isEmpty());
</span><span class="lines">@@ -592,7 +592,7 @@
</span><span class="cx">
</span><span class="cx"> void Connection::processIncomingSyncReply(std::unique_ptr<MessageDecoder> decoder)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncReplyStateMutex);
</del><ins>+ LockHolder locker(m_syncReplyStateMutex);
</ins><span class="cx">
</span><span class="cx"> // Go through the stack of sync requests that have pending replies and see which one
</span><span class="cx"> // this reply is for.
</span><span class="lines">@@ -750,7 +750,7 @@
</span><span class="cx"> platformInvalidate();
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_syncReplyStateMutex);
</del><ins>+ LockHolder locker(m_syncReplyStateMutex);
</ins><span class="cx">
</span><span class="cx"> ASSERT(m_shouldWaitForSyncReplies);
</span><span class="cx"> m_shouldWaitForSyncReplies = false;
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/Connection.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/Connection.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Platform/IPC/Connection.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -38,6 +38,7 @@
</span><span class="cx"> #include <wtf/Deque.h>
</span><span class="cx"> #include <wtf/Forward.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/WorkQueue.h>
</span><span class="cx"> #include <wtf/text/CString.h>
</span><span class="cx">
</span><span class="lines">@@ -298,7 +299,7 @@
</span><span class="cx"> class SyncMessageState;
</span><span class="cx"> friend class SyncMessageState;
</span><span class="cx">
</span><del>- Mutex m_syncReplyStateMutex;
</del><ins>+ Lock m_syncReplyStateMutex;
</ins><span class="cx"> bool m_shouldWaitForSyncReplies;
</span><span class="cx"> Vector<PendingSyncReply> m_pendingSyncReplies;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCoordinatedGraphicsCoordinatedGraphicsScenecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -690,7 +690,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> ASSERT(isMainThread());
</span><del>- MutexLocker locker(m_renderQueueMutex);
</del><ins>+ LockHolder locker(m_renderQueueMutex);
</ins><span class="cx"> m_renderQueue.append(WTF::move(function));
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCoordinatedGraphicsCoordinatedGraphicsSceneh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> #include <WebCore/Timer.h>
</span><span class="cx"> #include <functional>
</span><span class="cx"> #include <wtf/HashSet.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/RunLoop.h>
</span><span class="cx"> #include <wtf/ThreadingPrimitives.h>
</span><span class="cx"> #include <wtf/Vector.h>
</span><span class="lines">@@ -145,7 +146,7 @@
</span><span class="cx">
</span><span class="cx"> // Render queue can be accessed ony from main thread or updatePaintNode call stack!
</span><span class="cx"> Vector<std::function<void()>> m_renderQueue;
</span><del>- Mutex m_renderQueueMutex;
</del><ins>+ Lock m_renderQueueMutex;
</ins><span class="cx">
</span><span class="cx"> std::unique_ptr<WebCore::TextureMapper> m_textureMapper;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorThreadedCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -295,7 +295,7 @@
</span><span class="cx"> if (m_threadIdentifier)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(m_initializeRunLoopConditionMutex);
</del><ins>+ LockHolder locker(m_initializeRunLoopConditionMutex);
</ins><span class="cx"> m_threadIdentifier = createThread(compositingThreadEntry, this, "WebCore: ThreadedCompositor");
</span><span class="cx">
</span><span class="cx"> m_initializeRunLoopCondition.wait(m_initializeRunLoopConditionMutex);
</span><span class="lines">@@ -304,7 +304,7 @@
</span><span class="cx"> void ThreadedCompositor::runCompositingThread()
</span><span class="cx"> {
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_initializeRunLoopConditionMutex);
</del><ins>+ LockHolder locker(m_initializeRunLoopConditionMutex);
</ins><span class="cx">
</span><span class="cx"> m_compositingRunLoop = std::make_unique<CompositingRunLoop>([&] {
</span><span class="cx"> renderLayerTree();
</span><span class="lines">@@ -321,7 +321,7 @@
</span><span class="cx"> m_scene->purgeGLResources();
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_terminateRunLoopConditionMutex);
</del><ins>+ LockHolder locker(m_terminateRunLoopConditionMutex);
</ins><span class="cx"> m_compositingRunLoop = nullptr;
</span><span class="cx"> m_context = nullptr;
</span><span class="cx"> m_terminateRunLoopCondition.signal();
</span><span class="lines">@@ -332,7 +332,7 @@
</span><span class="cx">
</span><span class="cx"> void ThreadedCompositor::terminateCompositingThread()
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_terminateRunLoopConditionMutex);
</del><ins>+ LockHolder locker(m_terminateRunLoopConditionMutex);
</ins><span class="cx">
</span><span class="cx"> m_scene->detach();
</span><span class="cx"> m_compositingRunLoop->runLoop().stop();
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorThreadedCompositorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -111,9 +111,9 @@
</span><span class="cx">
</span><span class="cx"> ThreadIdentifier m_threadIdentifier;
</span><span class="cx"> ThreadCondition m_initializeRunLoopCondition;
</span><del>- Mutex m_initializeRunLoopConditionMutex;
</del><ins>+ Lock m_initializeRunLoopConditionMutex;
</ins><span class="cx"> ThreadCondition m_terminateRunLoopCondition;
</span><del>- Mutex m_terminateRunLoopConditionMutex;
</del><ins>+ Lock m_terminateRunLoopConditionMutex;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedNetworkCustomProtocolsCocoaCustomProtocolManagerCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -165,28 +165,28 @@
</span><span class="cx"> void CustomProtocolManager::addCustomProtocol(WKCustomProtocol *customProtocol)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(customProtocol);
</span><del>- MutexLocker locker(m_customProtocolMapMutex);
</del><ins>+ LockHolder locker(m_customProtocolMapMutex);
</ins><span class="cx"> m_customProtocolMap.add(customProtocol.customProtocolID, customProtocol);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void CustomProtocolManager::removeCustomProtocol(WKCustomProtocol *customProtocol)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(customProtocol);
</span><del>- MutexLocker locker(m_customProtocolMapMutex);
</del><ins>+ LockHolder locker(m_customProtocolMapMutex);
</ins><span class="cx"> m_customProtocolMap.remove(customProtocol.customProtocolID);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void CustomProtocolManager::registerScheme(const String& scheme)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!scheme.isNull());
</span><del>- MutexLocker locker(m_registeredSchemesMutex);
</del><ins>+ LockHolder locker(m_registeredSchemesMutex);
</ins><span class="cx"> m_registeredSchemes.add(scheme);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void CustomProtocolManager::unregisterScheme(const String& scheme)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!scheme.isNull());
</span><del>- MutexLocker locker(m_registeredSchemesMutex);
</del><ins>+ LockHolder locker(m_registeredSchemesMutex);
</ins><span class="cx"> m_registeredSchemes.remove(scheme);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -195,7 +195,7 @@
</span><span class="cx"> if (scheme.isNull())
</span><span class="cx"> return false;
</span><span class="cx">
</span><del>- MutexLocker locker(m_registeredSchemesMutex);
</del><ins>+ LockHolder locker(m_registeredSchemesMutex);
</ins><span class="cx"> return m_registeredSchemes.contains(scheme);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -275,7 +275,7 @@
</span><span class="cx">
</span><span class="cx"> RetainPtr<WKCustomProtocol> CustomProtocolManager::protocolForID(uint64_t customProtocolID)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_customProtocolMapMutex);
</del><ins>+ LockHolder locker(m_customProtocolMapMutex);
</ins><span class="cx">
</span><span class="cx"> CustomProtocolMap::const_iterator it = m_customProtocolMap.find(customProtocolID);
</span><span class="cx"> if (it == m_customProtocolMap.end())
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedNetworkCustomProtocolsCustomProtocolManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/Network/CustomProtocols/CustomProtocolManager.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Network/CustomProtocols/CustomProtocolManager.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Shared/Network/CustomProtocols/CustomProtocolManager.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -102,11 +102,11 @@
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> HashSet<String> m_registeredSchemes;
</span><del>- Mutex m_registeredSchemesMutex;
</del><ins>+ Lock m_registeredSchemesMutex;
</ins><span class="cx">
</span><span class="cx"> typedef HashMap<uint64_t, RetainPtr<WKCustomProtocol>> CustomProtocolMap;
</span><span class="cx"> CustomProtocolMap m_customProtocolMap;
</span><del>- Mutex m_customProtocolMapMutex;
</del><ins>+ Lock m_customProtocolMapMutex;
</ins><span class="cx">
</span><span class="cx"> // WKCustomProtocol objects can be removed from the m_customProtocolMap from multiple threads.
</span><span class="cx"> // We return a RetainPtr here because it is unsafe to return a raw pointer since the object might immediately be destroyed from a different thread.
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedlinuxSeccompFiltersSeccompBrokercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/Shared/linux/SeccompFilters/SeccompBroker.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx">
</span><span class="cx"> int m_socket;
</span><span class="cx">
</span><del>- mutable Mutex m_socketLock;
</del><ins>+ mutable Lock m_socketLock;
</ins><span class="cx">
</span><span class="cx"> // Maps files that may be read by malloc() to open file descriptors.
</span><span class="cx"> HashMap<String, int> m_fileDescriptorCache;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessPluginsPluginProcessConnectionManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx"> m_pluginProcessConnections.append(pluginProcessConnection);
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_tokensAndConnectionsMutex);
</del><ins>+ LockHolder locker(m_tokensAndConnectionsMutex);
</ins><span class="cx"> ASSERT(!m_tokensAndConnections.contains(pluginProcessToken));
</span><span class="cx">
</span><span class="cx"> m_tokensAndConnections.set(pluginProcessToken, pluginProcessConnection->connection());
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx"> ASSERT(vectorIndex != notFound);
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_tokensAndConnectionsMutex);
</del><ins>+ LockHolder locker(m_tokensAndConnectionsMutex);
</ins><span class="cx"> ASSERT(m_tokensAndConnections.contains(pluginProcessConnection->pluginProcessToken()));
</span><span class="cx">
</span><span class="cx"> m_tokensAndConnections.remove(pluginProcessConnection->pluginProcessToken());
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx">
</span><span class="cx"> void PluginProcessConnectionManager::pluginProcessCrashed(uint64_t pluginProcessToken)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_tokensAndConnectionsMutex);
</del><ins>+ LockHolder locker(m_tokensAndConnectionsMutex);
</ins><span class="cx"> IPC::Connection* connection = m_tokensAndConnections.get(pluginProcessToken);
</span><span class="cx">
</span><span class="cx"> // It's OK for connection to be null here; it will happen if this web process doesn't know
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessPluginsPluginProcessConnectionManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx">
</span><span class="cx"> Vector<RefPtr<PluginProcessConnection>> m_pluginProcessConnections;
</span><span class="cx">
</span><del>- Mutex m_tokensAndConnectionsMutex;
</del><ins>+ Lock m_tokensAndConnectionsMutex;
</ins><span class="cx"> HashMap<uint64_t, RefPtr<IPC::Connection>> m_tokensAndConnections;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageEventDispatchercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><span class="cx"> void EventDispatcher::addScrollingTreeForPage(WebPage* webPage)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_scrollingTreesMutex);
</del><ins>+ LockHolder locker(m_scrollingTreesMutex);
</ins><span class="cx">
</span><span class="cx"> ASSERT(webPage->corePage()->scrollingCoordinator());
</span><span class="cx"> ASSERT(!m_scrollingTrees.contains(webPage->pageID()));
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx">
</span><span class="cx"> void EventDispatcher::removeScrollingTreeForPage(WebPage* webPage)
</span><span class="cx"> {
</span><del>- MutexLocker locker(m_scrollingTreesMutex);
</del><ins>+ LockHolder locker(m_scrollingTreesMutex);
</ins><span class="cx"> ASSERT(m_scrollingTrees.contains(webPage->pageID()));
</span><span class="cx">
</span><span class="cx"> m_scrollingTrees.remove(webPage->pageID());
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><del>- MutexLocker locker(m_scrollingTreesMutex);
</del><ins>+ LockHolder locker(m_scrollingTreesMutex);
</ins><span class="cx"> if (RefPtr<ThreadedScrollingTree> scrollingTree = m_scrollingTrees.get(pageID)) {
</span><span class="cx"> // FIXME: It's pretty horrible that we're updating the back/forward state here.
</span><span class="cx"> // WebCore should always know the current state and know when it changes so the
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageEventDispatcherh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.h (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.h        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/WebProcess/WebPage/EventDispatcher.h        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> Ref<WorkQueue> m_queue;
</span><span class="cx">
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><del>- Mutex m_scrollingTreesMutex;
</del><ins>+ Lock m_scrollingTreesMutex;
</ins><span class="cx"> HashMap<uint64_t, RefPtr<WebCore::ThreadedScrollingTree>> m_scrollingTrees;
</span><span class="cx"> #endif
</span><span class="cx"> std::unique_ptr<WebCore::WheelEventDeltaTracker> m_recentWheelEventDeltaTracker;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcesssoupWebKitSoupRequestInputStreamcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Source/WebKit2/WebProcess/soup/WebKitSoupRequestInputStream.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -20,6 +20,7 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "WebKitSoupRequestInputStream.h"
</span><span class="cx">
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/Threading.h>
</span><span class="cx"> #include <wtf/glib/GRefPtr.h>
</span><span class="cx">
</span><span class="lines">@@ -41,7 +42,7 @@
</span><span class="cx"> uint64_t bytesReceived;
</span><span class="cx"> uint64_t bytesRead;
</span><span class="cx">
</span><del>- Mutex readLock;
</del><ins>+ Lock readLock;
</ins><span class="cx"> std::unique_ptr<AsyncReadData> pendingAsyncRead;
</span><span class="cx"> };
</span><span class="cx">
</span><span class="lines">@@ -84,7 +85,7 @@
</span><span class="cx"> WebKitSoupRequestInputStream* stream = WEBKIT_SOUP_REQUEST_INPUT_STREAM(inputStream);
</span><span class="cx"> GRefPtr<GTask> task = adoptGRef(g_task_new(stream, cancellable, callback, userData));
</span><span class="cx">
</span><del>- MutexLocker locker(stream->priv->readLock);
</del><ins>+ LockHolder locker(stream->priv->readLock);
</ins><span class="cx">
</span><span class="cx"> if (!webkitSoupRequestInputStreamHasDataToRead(stream) && !webkitSoupRequestInputStreamIsWaitingForData(stream)) {
</span><span class="cx"> g_task_return_int(task.get(), 0);
</span><span class="lines">@@ -143,7 +144,7 @@
</span><span class="cx"> if (webkitSoupRequestInputStreamFinished(stream))
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- MutexLocker locker(stream->priv->readLock);
</del><ins>+ LockHolder locker(stream->priv->readLock);
</ins><span class="cx">
</span><span class="cx"> if (dataLength) {
</span><span class="cx"> // Truncate the dataLength to the contentLength if it's known.
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Tools/ChangeLog        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2015-08-17 Filip Pizlo <fpizlo@apple.com>
+
+ Replace all remaining uses of WTF::Mutex with WTF::Lock
+ https://bugs.webkit.org/show_bug.cgi?id=148089
+
+ Reviewed by Geoffrey Garen.
+
+ * DumpRenderTree/JavaScriptThreading.cpp:
+ (javaScriptThreadsMutex):
+ (runJavaScriptThread):
+ (startJavaScriptThreads):
+ (stopJavaScriptThreads):
+ * TestWebKitAPI/Tests/WTF/Condition.cpp: Fixed a bug in the test that I found from turning the test into a benchmark.
+ * TestWebKitAPI/Tests/WTF/WorkQueue.cpp:
+ (TestWebKitAPI::TEST):
+ * TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:
+ (TestWebKitAPI::TEST):
+
</ins><span class="cx"> 2015-08-17 Commit Queue <commit-queue@webkit.org>
</span><span class="cx">
</span><span class="cx"> Unreviewed, rolling out r188539, r188544, r188552, and
</span></span></pre></div>
<a id="trunkToolsDumpRenderTreeJavaScriptThreadingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/DumpRenderTree/JavaScriptThreading.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/DumpRenderTree/JavaScriptThreading.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Tools/DumpRenderTree/JavaScriptThreading.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include <stdlib.h>
</span><span class="cx"> #include <wtf/Assertions.h>
</span><span class="cx"> #include <wtf/HashSet.h>
</span><ins>+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/Threading.h>
</span><span class="cx"> #include <wtf/ThreadingPrimitives.h>
</span><span class="cx"> #include <wtf/Vector.h>
</span><span class="lines">@@ -44,9 +45,9 @@
</span><span class="cx"> static bool javaScriptThreadsShouldTerminate;
</span><span class="cx"> static JSContextGroupRef javaScriptThreadsGroup;
</span><span class="cx">
</span><del>-static Mutex& javaScriptThreadsMutex()
</del><ins>+static Lock& javaScriptThreadsMutex()
</ins><span class="cx"> {
</span><del>- DEPRECATED_DEFINE_STATIC_LOCAL(Mutex, staticMutex, ());
</del><ins>+ DEPRECATED_DEFINE_STATIC_LOCAL(Lock, staticMutex, ());
</ins><span class="cx"> return staticMutex;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -70,26 +71,26 @@
</span><span class="cx">
</span><span class="cx"> JSGlobalContextRef ctx;
</span><span class="cx"> {
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> ctx = JSGlobalContextCreateInGroup(javaScriptThreadsGroup, 0);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSStringRef scriptRef;
</span><span class="cx"> {
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> scriptRef = JSStringCreateWithUTF8CString(script);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> while (true) {
</span><span class="cx"> {
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> JSValueRef exception = 0;
</span><span class="cx"> JSEvaluateScript(ctx, scriptRef, 0, 0, 1, &exception);
</span><span class="cx"> ASSERT(!exception);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> const size_t valuesCount = 1024;
</span><span class="cx"> JSValueRef values[valuesCount];
</span><span class="cx"> for (size_t i = 0; i < valuesCount; ++i)
</span><span class="lines">@@ -97,7 +98,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> if (javaScriptThreadsShouldTerminate)
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="lines">@@ -106,7 +107,7 @@
</span><span class="cx"> if (rand() % 5)
</span><span class="cx"> continue;
</span><span class="cx">
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> ThreadIdentifier thread = currentThread();
</span><span class="cx"> detachThread(thread);
</span><span class="cx"> javaScriptThreads().remove(thread);
</span><span class="lines">@@ -114,7 +115,7 @@
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> JSStringRelease(scriptRef);
</span><span class="cx"> JSGarbageCollect(ctx);
</span><span class="cx"> JSGlobalContextRelease(ctx);
</span><span class="lines">@@ -124,7 +125,7 @@
</span><span class="cx"> {
</span><span class="cx"> javaScriptThreadsGroup = JSContextGroupCreate();
</span><span class="cx">
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx">
</span><span class="cx"> for (size_t i = 0; i < javaScriptThreadsCount; ++i)
</span><span class="cx"> javaScriptThreads().add(createThread(&runJavaScriptThread, 0, 0));
</span><span class="lines">@@ -133,13 +134,13 @@
</span><span class="cx"> void stopJavaScriptThreads()
</span><span class="cx"> {
</span><span class="cx"> {
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> javaScriptThreadsShouldTerminate = true;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Vector<ThreadIdentifier, javaScriptThreadsCount> threads;
</span><span class="cx"> {
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> copyToVector(javaScriptThreads(), threads);
</span><span class="cx"> ASSERT(threads.size() == javaScriptThreadsCount);
</span><span class="cx"> }
</span><span class="lines">@@ -148,7 +149,7 @@
</span><span class="cx"> waitForThreadCompletion(threads[i]);
</span><span class="cx">
</span><span class="cx"> {
</span><del>- MutexLocker locker(javaScriptThreadsMutex());
</del><ins>+ LockHolder locker(javaScriptThreadsMutex());
</ins><span class="cx"> javaScriptThreads().clear();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWTFConditioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/Condition.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WTF/Condition.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/Condition.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx"> return !shouldContinue || !queue.isEmpty();
</span><span class="cx"> },
</span><span class="cx"> timeout);
</span><del>- if (!shouldContinue)
</del><ins>+ if (!shouldContinue && queue.isEmpty())
</ins><span class="cx"> return;
</span><span class="cx"> shouldNotify = queue.size() == maxQueueSize;
</span><span class="cx"> result = queue.takeFirst();
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWTFWorkQueuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/WorkQueue.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WTF/WorkQueue.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/WorkQueue.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -26,6 +26,8 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx">
</span><span class="cx"> #include "Test.h"
</span><ins>+#include <wtf/Condition.h>
+#include <wtf/Lock.h>
</ins><span class="cx"> #include <wtf/Vector.h>
</span><span class="cx"> #include <wtf/WorkQueue.h>
</span><span class="cx"> #include <string>
</span><span class="lines">@@ -40,8 +42,8 @@
</span><span class="cx">
</span><span class="cx"> TEST(WTF_WorkQueue, Simple)
</span><span class="cx"> {
</span><del>- Mutex m_lock;
- ThreadCondition m_testCompleted;
</del><ins>+ Lock m_lock;
+ Condition m_testCompleted;
</ins><span class="cx"> Vector<std::string> m_functionCallOrder;
</span><span class="cx">
</span><span class="cx"> bool calledSimpleTest = false;
</span><span class="lines">@@ -56,7 +58,7 @@
</span><span class="cx"> int initialRefCount = queue->refCount();
</span><span class="cx"> EXPECT_EQ(1, initialRefCount);
</span><span class="cx">
</span><del>- MutexLocker locker(m_lock);
</del><ins>+ LockHolder locker(m_lock);
</ins><span class="cx"> queue->dispatch([&](void) {
</span><span class="cx"> m_functionCallOrder.append(simpleTestLabel);
</span><span class="cx"> calledSimpleTest = true;
</span><span class="lines">@@ -69,7 +71,7 @@
</span><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> queue->dispatch([&](void) {
</span><del>- MutexLocker locker(m_lock);
</del><ins>+ LockHolder locker(m_lock);
</ins><span class="cx"> m_functionCallOrder.append(thirdTestLabel);
</span><span class="cx"> calledThirdTest = true;
</span><span class="cx">
</span><span class="lines">@@ -77,7 +79,7 @@
</span><span class="cx"> EXPECT_TRUE(calledLongTest);
</span><span class="cx"> EXPECT_TRUE(calledThirdTest);
</span><span class="cx">
</span><del>- m_testCompleted.signal();
</del><ins>+ m_testCompleted.notifyOne();
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> EXPECT_GT(queue->refCount(), 1);
</span><span class="lines">@@ -96,8 +98,8 @@
</span><span class="cx">
</span><span class="cx"> TEST(WTF_WorkQueue, TwoQueues)
</span><span class="cx"> {
</span><del>- Mutex m_lock;
- ThreadCondition m_testQueue1Completed, m_testQueue2Completed;
</del><ins>+ Lock m_lock;
+ Condition m_testQueue1Completed, m_testQueue2Completed;
</ins><span class="cx"> Vector<std::string> m_functionCallOrder;
</span><span class="cx">
</span><span class="cx"> bool calledSimpleTest = false;
</span><span class="lines">@@ -110,7 +112,7 @@
</span><span class="cx"> EXPECT_EQ(1, queue1->refCount());
</span><span class="cx"> EXPECT_EQ(1, queue2->refCount());
</span><span class="cx">
</span><del>- MutexLocker locker(m_lock);
</del><ins>+ LockHolder locker(m_lock);
</ins><span class="cx">
</span><span class="cx"> queue1->dispatch([&](void) {
</span><span class="cx"> m_functionCallOrder.append(simpleTestLabel);
</span><span class="lines">@@ -120,22 +122,22 @@
</span><span class="cx"> queue2->dispatch([&](void) {
</span><span class="cx"> std::this_thread::sleep_for(std::chrono::milliseconds(50));
</span><span class="cx">
</span><del>- MutexLocker locker(m_lock);
</del><ins>+ LockHolder locker(m_lock);
</ins><span class="cx">
</span><span class="cx"> // Will fail if queue2 took the mutex before queue1.
</span><span class="cx"> EXPECT_TRUE(calledThirdTest);
</span><span class="cx">
</span><span class="cx"> m_functionCallOrder.append(longTestLabel);
</span><span class="cx"> calledLongTest = true;
</span><del>- m_testQueue2Completed.signal();
</del><ins>+ m_testQueue2Completed.notifyOne();
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> queue1->dispatch([&](void) {
</span><del>- MutexLocker locker(m_lock);
</del><ins>+ LockHolder locker(m_lock);
</ins><span class="cx"> m_functionCallOrder.append(thirdTestLabel);
</span><span class="cx"> calledThirdTest = true;
</span><span class="cx">
</span><del>- m_testQueue1Completed.signal();
</del><ins>+ m_testQueue1Completed.notifyOne();
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> m_testQueue1Completed.wait(m_lock);
</span><span class="lines">@@ -158,8 +160,8 @@
</span><span class="cx">
</span><span class="cx"> TEST(WTF_WorkQueue, DispatchAfter)
</span><span class="cx"> {
</span><del>- Mutex m_lock;
- ThreadCondition m_testCompleted, m_dispatchAfterTestCompleted;
</del><ins>+ Lock m_lock;
+ Condition m_testCompleted, m_dispatchAfterTestCompleted;
</ins><span class="cx"> Vector<std::string> m_functionCallOrder;
</span><span class="cx">
</span><span class="cx"> bool calledSimpleTest = false;
</span><span class="lines">@@ -167,20 +169,20 @@
</span><span class="cx">
</span><span class="cx"> auto queue = WorkQueue::create("com.apple.WebKit.Test.dispatchAfter");
</span><span class="cx">
</span><del>- MutexLocker locker(m_lock);
</del><ins>+ LockHolder locker(m_lock);
</ins><span class="cx">
</span><span class="cx"> queue->dispatch([&](void) {
</span><del>- MutexLocker locker(m_lock);
</del><ins>+ LockHolder locker(m_lock);
</ins><span class="cx"> m_functionCallOrder.append(simpleTestLabel);
</span><span class="cx"> calledSimpleTest = true;
</span><del>- m_testCompleted.signal();
</del><ins>+ m_testCompleted.notifyOne();
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> queue->dispatchAfter(std::chrono::milliseconds(500), [&](void) {
</span><del>- MutexLocker locker(m_lock);
</del><ins>+ LockHolder locker(m_lock);
</ins><span class="cx"> m_functionCallOrder.append(dispatchAfterLabel);
</span><span class="cx"> calledDispatchAfterTest = true;
</span><del>- m_dispatchAfterTestCompleted.signal();
</del><ins>+ m_dispatchAfterTestCompleted.notifyOne();
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> m_testCompleted.wait(m_lock);
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWTFglibWorkQueueGLibcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp (188593 => 188594)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp        2015-08-18 19:28:37 UTC (rev 188593)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp        2015-08-18 19:31:28 UTC (rev 188594)
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> TEST(WTF_WorkQueue, AsyncIO)
</span><span class="cx"> {
</span><span class="cx"> struct TestingContext {
</span><del>- Mutex m_lock;
</del><ins>+ Lock m_lock;
</ins><span class="cx"> ThreadCondition m_testCompleted;
</span><span class="cx"> GMainContext* m_mainContext;
</span><span class="cx"> } context;
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> GUniquePtr<char> currentDirectory(g_get_current_dir());
</span><span class="cx"> GRefPtr<GFile> file = adoptGRef(g_file_new_for_path(currentDirectory.get()));
</span><span class="cx">
</span><del>- MutexLocker locker(context.m_lock);
</del><ins>+ LockHolder locker(context.m_lock);
</ins><span class="cx"> queue->dispatch([&](void) {
</span><span class="cx"> EXPECT_TRUE(g_main_context_get_thread_default());
</span><span class="cx"> EXPECT_TRUE(g_main_context_get_thread_default() != context.m_mainContext);
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx"> g_file_query_info_async(file.get(), G_FILE_ATTRIBUTE_STANDARD_SIZE, G_FILE_QUERY_INFO_NONE, G_PRIORITY_DEFAULT, nullptr,
</span><span class="cx"> [](GObject*, GAsyncResult*, gpointer userData) {
</span><span class="cx"> TestingContext* context = static_cast<TestingContext*>(userData);
</span><del>- MutexLocker locker(context->m_lock);
</del><ins>+ LockHolder locker(context->m_lock);
</ins><span class="cx"> EXPECT_EQ(g_main_context_get_thread_default(), context->m_mainContext);
</span><span class="cx"> context->m_testCompleted.signal();
</span><span class="cx"> }, &context);
</span></span></pre>
</div>
</div>
</body>
</html>