<!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&lt;DataType&gt;::append):
(WTF::MessageQueue&lt;DataType&gt;::appendAndKill):
(WTF::MessageQueue&lt;DataType&gt;::appendAndCheckEmpty):
(WTF::MessageQueue&lt;DataType&gt;::prepend):
(WTF::MessageQueue&lt;DataType&gt;::removeIf):
(WTF::MessageQueue&lt;DataType&gt;::isEmpty):
(WTF::MessageQueue&lt;DataType&gt;::kill):
(WTF::MessageQueue&lt;DataType&gt;::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  &lt;fpizlo@apple.com&gt;
+
+        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&lt;DataType&gt;::append):
+        (WTF::MessageQueue&lt;DataType&gt;::appendAndKill):
+        (WTF::MessageQueue&lt;DataType&gt;::appendAndCheckEmpty):
+        (WTF::MessageQueue&lt;DataType&gt;::prepend):
+        (WTF::MessageQueue&lt;DataType&gt;::removeIf):
+        (WTF::MessageQueue&lt;DataType&gt;::isEmpty):
+        (WTF::MessageQueue&lt;DataType&gt;::kill):
+        (WTF::MessageQueue&lt;DataType&gt;::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  &lt;achristensen@webkit.org&gt;
</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 &quot;config.h&quot;
+
+#include &lt;mutex&gt;
+#include &lt;thread&gt;
+#include &lt;unistd.h&gt;
+#include &lt;wtf/Condition.h&gt;
+#include &lt;wtf/CurrentTime.h&gt;
+#include &lt;wtf/DataLog.h&gt;
+#include &lt;wtf/Deque.h&gt;
+#include &lt;wtf/Lock.h&gt;
+#include &lt;wtf/StdLibExtras.h&gt;
+#include &lt;wtf/StringPrintStream.h&gt;
+#include &lt;wtf/Threading.h&gt;
+#include &lt;wtf/ThreadingPrimitives.h&gt;
+#include &lt;wtf/Vector.h&gt;
+
+namespace {
+
+const bool verbose = false;
+
+unsigned numProducers;
+unsigned numConsumers;
+unsigned maxQueueSize;
+unsigned numMessagesPerProducer;
+    
+NO_RETURN void usage()
+{
+    printf(&quot;Usage: ConditionSpeedTest lock|mutex|all &lt;num producers&gt; &lt;num consumers&gt; &lt;max queue size&gt; &lt;num messages per producer&gt;\n&quot;);
+    exit(1);
+}
+
+template&lt;typename Functor, typename ConditionType, typename LockType&gt;
+void wait(ConditionType&amp; condition, LockType&amp; lock, const Functor&amp; predicate)
+{
+    while (!predicate())
+        condition.wait(lock);
+}
+
+template&lt;typename LockType, typename ConditionType, typename NotifyFunctor, typename NotifyAllFunctor&gt;
+void runTest(
+    unsigned numProducers,
+    unsigned numConsumers,
+    unsigned maxQueueSize,
+    unsigned numMessagesPerProducer,
+    const NotifyFunctor&amp; notify,
+    const NotifyAllFunctor&amp; notifyAll)
+{
+    Deque&lt;unsigned&gt; queue;
+    bool shouldContinue = true;
+    LockType lock;
+    ConditionType emptyCondition;
+    ConditionType fullCondition;
+
+    Vector&lt;ThreadIdentifier&gt; consumerThreads;
+    Vector&lt;ThreadIdentifier&gt; producerThreads;
+
+    Vector&lt;unsigned&gt; received;
+    LockType receivedLock;
+    
+    for (unsigned i = numConsumers; i--;) {
+        ThreadIdentifier threadIdentifier = createThread(
+            &quot;Consumer thread&quot;,
+            [&amp;] () {
+                for (;;) {
+                    unsigned result;
+                    unsigned mustNotify = false;
+                    {
+                        std::unique_lock&lt;LockType&gt; locker(lock);
+                        wait(
+                            emptyCondition, lock,
+                            [&amp;] () {
+                                if (verbose)
+                                    dataLog(toString(currentThread(), &quot;: Checking consumption predicate with shouldContinue = &quot;, shouldContinue, &quot;, queue.size() == &quot;, queue.size(), &quot;\n&quot;));
+                                return !shouldContinue || !queue.isEmpty();
+                            });
+                        if (!shouldContinue &amp;&amp; queue.isEmpty())
+                            return;
+                        mustNotify = queue.size() == maxQueueSize;
+                        result = queue.takeFirst();
+                    }
+                    notify(fullCondition, mustNotify);
+
+                    {
+                        std::lock_guard&lt;LockType&gt; locker(receivedLock);
+                        received.append(result);
+                    }
+                }
+            });
+        consumerThreads.append(threadIdentifier);
+    }
+
+    for (unsigned i = numProducers; i--;) {
+        ThreadIdentifier threadIdentifier = createThread(
+            &quot;Producer Thread&quot;,
+            [&amp;] () {
+                for (unsigned i = 0; i &lt; numMessagesPerProducer; ++i) {
+                    bool mustNotify = false;
+                    {
+                        std::unique_lock&lt;LockType&gt; locker(lock);
+                        wait(
+                            fullCondition, lock,
+                            [&amp;] () {
+                                if (verbose)
+                                    dataLog(toString(currentThread(), &quot;: Checking production predicate with shouldContinue = &quot;, shouldContinue, &quot;, queue.size() == &quot;, queue.size(), &quot;\n&quot;));
+                                return queue.size() &lt; maxQueueSize;
+                            });
+                        mustNotify = queue.isEmpty();
+                        queue.append(i);
+                    }
+                    notify(emptyCondition, mustNotify);
+                }
+            });
+        producerThreads.append(threadIdentifier);
+    }
+
+    for (ThreadIdentifier threadIdentifier : producerThreads)
+        waitForThreadCompletion(threadIdentifier);
+
+    {
+        std::lock_guard&lt;LockType&gt; 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 &lt; numMessagesPerProducer; ++messageIndex) {
+        for (unsigned producerIndex = 0; producerIndex &lt; numProducers; ++producerIndex)
+            RELEASE_ASSERT(messageIndex == received[messageIndex * numProducers + producerIndex]);
+    }
+}
+
+template&lt;typename LockType, typename ConditionType, typename NotifyFunctor, typename NotifyAllFunctor&gt;
+void runBenchmark(
+    const char* name,
+    const NotifyFunctor&amp; notify,
+    const NotifyAllFunctor&amp; notifyAll)
+{
+    double before = monotonicallyIncreasingTimeMS();
+    
+    runTest&lt;LockType, ConditionType&gt;(
+        numProducers,
+        numConsumers,
+        maxQueueSize,
+        numMessagesPerProducer,
+        notify,
+        notifyAll);
+
+    double after = monotonicallyIncreasingTimeMS();
+
+    printf(&quot;%s: %.3lf ms.\n&quot;, name, after - before);
+}
+
+} // anonymous namespace
+
+int main(int argc, char** argv)
+{
+    WTF::initializeThreading();
+
+    if (argc != 6
+        || sscanf(argv[2], &quot;%u&quot;, &amp;numProducers) != 1
+        || sscanf(argv[3], &quot;%u&quot;, &amp;numConsumers) != 1
+        || sscanf(argv[4], &quot;%u&quot;, &amp;maxQueueSize) != 1
+        || sscanf(argv[5], &quot;%u&quot;, &amp;numMessagesPerProducer) != 1)
+        usage();
+
+    bool didRun = false;
+    if (!strcmp(argv[1], &quot;lock&quot;) || !strcmp(argv[1], &quot;all&quot;)) {
+        runBenchmark&lt;Lock, Condition&gt;(
+            &quot;WTF Lock NotifyOne&quot;,
+            [&amp;] (Condition&amp; condition, bool mustNotify) {
+                condition.notifyOne();
+            },
+            [&amp;] (Condition&amp; condition) {
+                condition.notifyAll();
+            });
+        runBenchmark&lt;Lock, Condition&gt;(
+            &quot;WTF Lock NotifyAll&quot;,
+            [&amp;] (Condition&amp; condition, bool mustNotify) {
+                if (mustNotify)
+                    condition.notifyAll();
+            },
+            [&amp;] (Condition&amp; condition) {
+                condition.notifyAll();
+            });
+        didRun = true;
+    }
+    if (!strcmp(argv[1], &quot;mutex&quot;) || !strcmp(argv[1], &quot;all&quot;)) {
+        runBenchmark&lt;Mutex, ThreadCondition&gt;(
+            &quot;Platform Mutex NotifyOne&quot;,
+            [&amp;] (ThreadCondition&amp; condition, bool mustNotify) {
+                condition.signal();
+            },
+            [&amp;] (ThreadCondition&amp; condition) {
+                condition.broadcast();
+            });
+        runBenchmark&lt;Mutex, ThreadCondition&gt;(
+            &quot;Platform Mutex NotifyAll&quot;,
+            [&amp;] (ThreadCondition&amp; condition, bool mustNotify) {
+                if (mustNotify)
+                    condition.broadcast();
+            },
+            [&amp;] (ThreadCondition&amp; 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 &quot;config.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &lt;unistd.h&gt;
</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 &lt;chrono&gt;
</span><span class="cx"> #include &lt;functional&gt;
</span><span class="cx"> #include &lt;mutex&gt;
</span><ins>+#include &lt;wtf/CurrentTime.h&gt;
</ins><span class="cx"> #include &lt;wtf/ParkingLot.h&gt;
</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&lt;typename LockType&gt;
</span><del>-    bool waitUntil(
-        LockType&amp; lock, std::chrono::steady_clock::time_point timeout)
</del><ins>+    bool waitUntil(LockType&amp; lock, Clock::time_point timeout)
</ins><span class="cx">     {
</span><del>-        bool result = ParkingLot::parkConditionally(
-            &amp;m_dummy,
-            [] () -&gt; bool { return true; },
-            [&amp;lock] () { lock.unlock(); },
-            timeout);
</del><ins>+        bool result;
+        if (timeout &lt; Clock::now()) {
+            lock.unlock();
+            result = false;
+        } else {
+            result = ParkingLot::parkConditionally(
+                &amp;m_dummy,
+                [] () -&gt; bool { return true; },
+                [&amp;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&lt;typename LockType, typename Functor&gt;
</span><del>-    bool waitUntil(
-        LockType&amp; lock, std::chrono::steady_clock::time_point timeout, const Functor&amp; predicate)
</del><ins>+    bool waitUntil(LockType&amp; lock, Clock::time_point timeout, const Functor&amp; 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&amp; lock, const DurationType&amp; relativeTimeout, const Functor&amp; predicate)
</span><span class="cx">     {
</span><del>-        std::chrono::steady_clock::time_point absoluteTimeout =
-            std::chrono::steady_clock::now() +
-            std::chrono::duration_cast&lt;std::chrono::steady_clock::duration&gt;(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&lt;typename LockType&gt;
</span><span class="cx">     void wait(LockType&amp; 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&lt;typename LockType, typename Functor&gt;
</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&lt;typename LockType, typename TimeType&gt;
+    bool waitUntil(LockType&amp; lock, const TimeType&amp; timeout)
+    {
+        if (timeout == TimeType::max()) {
+            wait(lock);
+            return true;
+        }
+        return waitForImpl(lock, timeout - TimeType::clock::now());
+    }
+
+    template&lt;typename LockType&gt;
+    bool waitUntilWallClockSeconds(LockType&amp; lock, double absoluteTimeoutSeconds)
+    {
+        return waitForSecondsImpl(lock, absoluteTimeoutSeconds - currentTime());
+    }
+
+    template&lt;typename LockType&gt;
+    bool waitUntilMonotonicClockSeconds(LockType&amp; 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(&amp;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&lt;typename LockType&gt;
+    bool waitForSecondsImpl(LockType&amp; lock, double relativeTimeoutSeconds)
+    {
+        double relativeTimeoutNanoseconds = relativeTimeoutSeconds * (1000.0 * 1000.0 * 1000.0);
+        
+        if (!(relativeTimeoutNanoseconds &gt; 0)) {
+            // This handles insta-timeouts as well as NaN.
+            lock.unlock();
+            lock.lock();
+            return false;
+        }
+
+        if (relativeTimeoutNanoseconds &gt; static_cast&lt;double&gt;(std::numeric_limits&lt;int64_t&gt;::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&lt;int64_t&gt;(relativeTimeoutNanoseconds));
+
+        return waitForImpl(lock, relativeTimeout);
+    }
</ins><span class="cx">     
</span><ins>+    template&lt;typename LockType, typename DurationType&gt;
+    bool waitForImpl(LockType&amp; lock, const DurationType&amp; relativeTimeout)
+    {
+        return waitUntil(lock, absoluteFromRelative(relativeTimeout));
+    }
+
+    template&lt;typename DurationType&gt;
+    Clock::time_point absoluteFromRelative(const DurationType&amp; relativeTimeout)
+    {
+        if (relativeTimeout &lt; DurationType::zero())
+            return Clock::time_point::min();
+
+        if (relativeTimeout &gt; 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&lt;Clock::duration&gt;(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 &lt;limits&gt;
</span><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><ins>+#include &lt;wtf/Condition.h&gt;
</ins><span class="cx"> #include &lt;wtf/Deque.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/Noncopyable.h&gt;
</span><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -77,8 +79,8 @@
</span><span class="cx">         static double infiniteTime() { return std::numeric_limits&lt;double&gt;::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&lt;std::unique_ptr&lt;DataType&gt;&gt; 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&lt;typename DataType&gt;
</span><span class="cx">     inline void MessageQueue&lt;DataType&gt;::append(std::unique_ptr&lt;DataType&gt; 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&lt;typename DataType&gt;
</span><span class="cx">     inline void MessageQueue&lt;DataType&gt;::appendAndKill(std::unique_ptr&lt;DataType&gt; 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&lt;typename DataType&gt;
</span><span class="cx">     inline bool MessageQueue&lt;DataType&gt;::appendAndCheckEmpty(std::unique_ptr&lt;DataType&gt; 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&lt;typename DataType&gt;
</span><span class="cx">     inline void MessageQueue&lt;DataType&gt;::prepend(std::unique_ptr&lt;DataType&gt; 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&lt;typename DataType&gt;
</span><span class="lines">@@ -137,7 +139,7 @@
</span><span class="cx">     template&lt;typename Predicate&gt;
</span><span class="cx">     inline auto MessageQueue&lt;DataType&gt;::waitForMessageFilteredWithTimeout(MessageQueueWaitResult&amp; result, Predicate&amp;&amp; predicate, double absoluteTime) -&gt; std::unique_ptr&lt;DataType&gt;
</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&lt;typename DataType&gt;
</span><span class="cx">     inline auto MessageQueue&lt;DataType&gt;::tryGetMessage() -&gt; std::unique_ptr&lt;DataType&gt;
</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&lt;typename DataType&gt;
</span><span class="cx">     inline auto MessageQueue&lt;DataType&gt;::tryGetMessageIgnoringKilled() -&gt; std::unique_ptr&lt;DataType&gt;
</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&lt;typename Predicate&gt;
</span><span class="cx">     inline void MessageQueue&lt;DataType&gt;::removeIf(Predicate&amp;&amp; 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([&amp;predicate](const std::unique_ptr&lt;DataType&gt;&amp; ptr) -&gt; bool {
</span><span class="cx">                 ASSERT(ptr);
</span><span class="lines">@@ -214,7 +216,7 @@
</span><span class="cx">     template&lt;typename DataType&gt;
</span><span class="cx">     inline bool MessageQueue&lt;DataType&gt;::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&lt;typename DataType&gt;
</span><span class="cx">     inline void MessageQueue&lt;DataType&gt;::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&lt;typename DataType&gt;
</span><span class="cx">     inline bool MessageQueue&lt;DataType&gt;::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&lt;ThreadPrivate*&gt;(threadData);
</span><del>-    MutexLocker lock(sharedThread-&gt;m_mutex);
</del><ins>+    LockHolder lock(sharedThread-&gt;m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     while (sharedThread-&gt;m_threadID) {
</span><span class="cx">         if (sharedThread-&gt;m_running) {
</span><span class="cx">             (*sharedThread-&gt;m_threadFunction)(sharedThread-&gt;m_parameters);
</span><span class="cx">             sharedThread-&gt;m_running = false;
</span><span class="cx">             sharedThread-&gt;m_parent = 0;
</span><del>-            sharedThread-&gt;m_threadCondition.signal();
</del><ins>+            sharedThread-&gt;m_threadCondition.notifyOne();
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         sharedThread-&gt;m_threadCondition.wait(sharedThread-&gt;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 &lt;wtf/Condition.h&gt;
+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/Threading.h&gt;
</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&lt;bool()&gt; validation,
</span><span class="cx">     std::function&lt;void()&gt; 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(), &quot;: parking.\n&quot;));
</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&lt;std::mutex&gt; locker(me-&gt;parkingLock);
</span><del>-        while (me-&gt;address &amp;&amp; std::chrono::steady_clock::now() &lt; timeout) {
</del><ins>+        while (me-&gt;address &amp;&amp; Clock::now() &lt; 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-&gt;parkingCondition.wait(locker);
</span><span class="cx">             else
</span><span class="cx">                 me-&gt;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&amp;) = 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&lt;bool()&gt; validation,
</span><span class="cx">         std::function&lt;void()&gt; 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&lt;void(ThreadIdentifier, const void*)&gt;);
</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 &quot;dtoa.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &lt;stdio.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/MathExtras.h&gt;
</span><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</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 &gt;&gt;= 2))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    s_dtoaP5Mutex-&gt;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-&gt;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-&gt;lock();
</del><ins>+            s_dtoaP5Mutex.lock();
</ins><span class="cx">             if (p5sUsed == p5sCount) {
</span><span class="cx">                 ASSERT(!p5-&gt;next);
</span><span class="cx">                 p5-&gt;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-&gt;unlock();
</del><ins>+            s_dtoaP5Mutex.unlock();
</ins><span class="cx">         }
</span><span class="cx">         p5 = p5-&gt;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&amp; sign, int&amp; exponent, unsigned&amp; 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  &lt;fpizlo@apple.com&gt;
+
+        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  &lt;mmaxfield@apple.com&gt;
</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, &quot;Audio Decoder&quot;);
</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&lt;DecodingTask&gt; 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&lt;AudioDestinationConsumer&gt; 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&amp; consumer : m_audioConsumers)
</span><span class="cx">         consumer-&gt;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&amp; consumer : m_audioConsumers)
</span><span class="cx">         consumer-&gt;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 &quot;AudioDestinationConsumer.h&quot;
</span><span class="cx"> #include &quot;RealtimeMediaSource.h&quot;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</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&lt;RefPtr&lt;AudioDestinationConsumer&gt;&gt; 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()-&gt;databaseThread()-&gt;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 &quot;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&lt;SQLTransactionBackend&gt; Database::runTransaction(PassRefPtr&lt;SQLTransaction&gt; 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 &quot;DatabaseError.h&quot;
</span><span class="cx"> #include &quot;SQLiteDatabase.h&quot;
</span><span class="cx"> #include &lt;wtf/Deque.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -162,7 +163,7 @@
</span><span class="cx">     RefPtr&lt;DatabaseAuthorizer&gt; m_databaseAuthorizer;
</span><span class="cx"> 
</span><span class="cx">     Deque&lt;RefPtr&lt;SQLTransactionBackend&gt;&gt; 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 &quot;DatabaseBasicTypes.h&quot;
</span><span class="cx"> #include &quot;DatabaseError.h&quot;
</span><span class="cx"> #include &quot;SQLTransactionBackend.h&quot;
</span><ins>+#include &lt;wtf/Condition.h&gt;
+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><del>-#include &lt;wtf/Threading.h&gt;
</del><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</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, &quot;Started DatabaseThread %p&quot;, 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&lt;DatabaseThread&gt; 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&amp; 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-&gt;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-&gt;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-&gt;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&lt;Ref&lt;Database&gt;&gt; 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&amp; nameMap : m_openDatabaseMap-&gt;values()) {
</span><span class="lines">@@ -389,13 +389,13 @@
</span><span class="cx"> 
</span><span class="cx"> String DatabaseTracker::fullPathForDatabase(SecurityOrigin* origin, const String&amp; 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&lt;RefPtr&lt;SecurityOrigin&gt;&gt;&amp; 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&lt;String&gt; 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-&gt;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-&gt;securityOrigin(), database-&gt;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&lt;DatabaseOriginMap&gt;();
</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&amp; name, HashSet&lt;RefPtr&lt;Database&gt;&gt;* 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&lt;OriginLock&gt; 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-&gt;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&lt;String&gt; 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&amp; 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(&quot;Unable to delete file for database %s in origin %s&quot;, name.ascii().data(), origin-&gt;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, &quot;DELETE FROM Databases WHERE origin=? AND name=?&quot;);
</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-&gt;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&amp; openDatabase : *m_openDatabaseMap) {
</span><span class="cx">                 auto&amp; 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&amp; DatabaseTracker::openDatabaseMutex()
</del><ins>+Lock&amp; DatabaseTracker::openDatabaseMutex()
</ins><span class="cx"> {
</span><del>-    static NeverDestroyed&lt;Mutex&gt; mutex;
</del><ins>+    static NeverDestroyed&lt;Lock&gt; 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&amp; notificationMutex()
</del><ins>+static Lock&amp; notificationMutex()
</ins><span class="cx"> {
</span><del>-    static NeverDestroyed&lt;Mutex&gt; mutex;
</del><ins>+    static NeverDestroyed&lt;Lock&gt; 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&amp; 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&lt;RefPtr&lt;SecurityOrigin&gt;, String&gt;(origin-&gt;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&amp; openDatabaseMutex();
</del><ins>+    static Lock&amp; 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&lt;String, DatabaseSet*&gt; DatabaseNameMap;
</span><span class="cx">     typedef HashMap&lt;RefPtr&lt;SecurityOrigin&gt;, DatabaseNameMap*&gt; DatabaseOriginMap;
</span><span class="cx"> 
</span><del>-    Mutex m_openDatabaseMapGuard;
</del><ins>+    Lock m_openDatabaseMapGuard;
</ins><span class="cx">     mutable std::unique_ptr&lt;DatabaseOriginMap&gt; 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&lt;String, RefPtr&lt;OriginLock&gt;&gt; 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 &quot;FileSystem.h&quot;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/ThreadSafeRefCounted.h&gt;
</span><del>-#include &lt;wtf/ThreadingPrimitives.h&gt;
</del><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</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 &quot;ScriptExecutionContext.h&quot;
</span><del>-#include &lt;wtf/ThreadingPrimitives.h&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</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&lt;T&gt; 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-&gt;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&lt;T&gt; m_callback;
</span><span class="cx">     RefPtr&lt;ScriptExecutionContext&gt; 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&lt;SQLStatement&gt; 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 &lt;memory&gt;
</span><span class="cx"> #include &lt;wtf/Deque.h&gt;
</span><span class="cx"> #include &lt;wtf/Forward.h&gt;
</span><del>-#include &lt;wtf/ThreadingPrimitives.h&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</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&lt;std::unique_ptr&lt;SQLStatement&gt;&gt; m_statementQueue;
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;SQLiteTransaction&gt; 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-&gt;watchdog)
</span><span class="cx">         m_vm-&gt;watchdog-&gt;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-&gt;watchdog)
</span><span class="cx">         return m_vm-&gt;watchdog-&gt;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 &lt;debugger/Debugger.h&gt;
</span><span class="cx"> #include &lt;heap/Strong.h&gt;
</span><span class="cx"> #include &lt;wtf/Forward.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/NakedPtr.h&gt;
</span><del>-#include &lt;wtf/Threading.h&gt;
</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&lt;JSWorkerGlobalScope&gt; 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&lt;SerializedScriptValue&gt; message, std::unique_ptr&lt;MessagePortChannelArray&gt; channels)
</span><span class="cx"> {
</span><del>-    MutexLocker lock(m_channel-&gt;m_mutex);
</del><ins>+    LockHolder lock(m_channel-&gt;m_mutex);
</ins><span class="cx">     if (!m_channel-&gt;m_outgoingQueue)
</span><span class="cx">         return;
</span><span class="cx">     bool wasEmpty = m_channel-&gt;m_outgoingQueue-&gt;appendAndCheckEmpty(std::make_unique&lt;PlatformMessagePortChannel::EventData&gt;(message, WTF::move(channels)));
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool MessagePortChannel::tryGetMessageFromRemote(RefPtr&lt;SerializedScriptValue&gt;&amp; message, std::unique_ptr&lt;MessagePortChannelArray&gt;&amp; channels)
</span><span class="cx"> {
</span><del>-    MutexLocker lock(m_channel-&gt;m_mutex);
</del><ins>+    LockHolder lock(m_channel-&gt;m_mutex);
</ins><span class="cx">     auto result = m_channel-&gt;m_incomingQueue-&gt;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-&gt;m_mutex);
</del><ins>+    LockHolder lock(m_channel-&gt;m_mutex);
</ins><span class="cx">     return m_channel-&gt;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-&gt;m_mutex);
</del><ins>+    LockHolder lock(m_channel-&gt;m_mutex);
</ins><span class="cx">     return !m_channel-&gt;m_incomingQueue-&gt;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-&gt;m_mutex);
</del><ins>+    LockHolder lock(m_channel-&gt;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-&gt;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&lt;PlatformMessagePortChannel&gt; 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 &quot;retain icon for url&quot; 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-&gt;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 &amp;&amp; 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 &amp;&amp; m_iconURLToRecordMap.get(iconRecord-&gt;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-&gt;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&lt;String&gt; 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&lt;IconRecord&gt; 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-&gt;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-&gt;retainingPageURLs().size() == 0);
</span><span class="cx">             LOG(IconDatabase, &quot;Icon for icon url %s is about to be destroyed - removing mapping for it&quot;, urlForLogging(iconRecord-&gt;iconURL()).ascii().data());
</span><span class="cx">             m_iconURLToRecordMap.remove(iconRecord-&gt;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-&gt;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, &quot;Found expiration time on a present icon based on existing IconRecord&quot;);
</span><span class="cx">             return static_cast&lt;int&gt;(currentTime()) - static_cast&lt;int&gt;(icon-&gt;getTimestamp()) &gt; 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-&gt;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&lt;String, IconRecord*&gt;::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&lt;SuddenTerminationDisabler&gt;();
</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(&quot;Unable to open icon database at path %s - %s&quot;, 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 + &quot;-journal&quot;);
</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&lt;String&gt; 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-&gt;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-&gt;iconURL(), iconRecord-&gt;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&lt;String&gt; 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&lt;IconRecord*&gt; 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&lt;IconSnapshot&gt; iconSnapshots;
</span><span class="cx">         Vector&lt;PageURLSnapshot&gt; 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 &quot;SQLiteDatabase.h&quot;
</span><span class="cx"> #include &quot;Timer.h&quot;
</span><ins>+#include &lt;wtf/Condition.h&gt;
</ins><span class="cx"> #include &lt;wtf/HashCountedSet.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="cx"> #include &lt;wtf/HashSet.h&gt;
</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&lt;SuddenTerminationDisabler&gt; 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&lt;String, IconRecord*&gt; m_iconURLToRecordMap;
</span><span class="cx">     HashMap&lt;String, PageURLRecord*&gt; m_pageURLToRecordMap;
</span><span class="cx">     HashSet&lt;String&gt; 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&lt;String, PageURLSnapshot&gt; m_pageURLsPendingSync;
</span><span class="cx">     HashMap&lt;String, IconSnapshot&gt; 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&lt;String&gt; m_pageURLsPendingImport;
</span><span class="cx">     HashSet&lt;String&gt; m_pageURLsInterestedInIcons;
</span><span class="cx">     HashSet&lt;IconRecord*&gt; 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&lt;String&gt; m_urlsToRetain;
</span><span class="cx">     HashCountedSet&lt;String&gt; 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&amp; 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">         &amp;&amp; (rootStateNodeChanged
</span><span class="cx">             || rootNode-&gt;hasChangedProperty(ScrollingStateFrameScrollingNode::NonFastScrollableRegion)
</span><span class="cx">             || rootNode-&gt;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-&gt;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() &gt; 0 &amp;&amp; m_mainFramePinnedToTheLeft &amp;&amp; !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 &quot;ScrollingCoordinator.h&quot;
</span><span class="cx"> #include &quot;WheelEventTestTrigger.h&quot;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/ThreadSafeRefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/TypeCasts.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -160,11 +161,11 @@
</span><span class="cx">     typedef HashMap&lt;ScrollingNodeID, ScrollingTreeNode*&gt; 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 &lt;wtf/Forward.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="cx"> #elif OS(LINUX)
</span><span class="cx"> #include &quot;Timer.h&quot;
</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() &amp;&amp; !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 &quot;HRTFDatabase.h&quot;
</span><span class="cx"> #include &lt;memory&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="lines">@@ -76,7 +77,7 @@
</span><span class="cx">     std::unique_ptr&lt;HRTFDatabase&gt; 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 &amp; 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 &quot;PlatformScreen.h&quot;
</span><span class="cx"> #include &lt;wtf/HashSet.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><del>-#include &lt;wtf/Threading.h&gt;
</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&amp; mutex() { return m_mutex; }
</del><ins>+    Lock&amp; mutex() { return m_mutex; }
</ins><span class="cx"> 
</span><span class="cx">     static RefPtr&lt;DisplayRefreshMonitor&gt; 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&lt;DisplayRefreshMonitorClient*&gt; m_clients;
</span><span class="cx">     HashSet&lt;DisplayRefreshMonitorClient*&gt;* 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 &quot;Timer.h&quot;
</span><span class="cx"> #include &lt;functional&gt;
</span><span class="cx"> #include &lt;wtf/HashSet.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/WeakPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -317,7 +318,7 @@
</span><span class="cx">     std::function&lt;void()&gt; m_pendingSeek;
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;Notification&gt; 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&lt;PlatformTimeRanges&gt; 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&lt;void*&gt;(m_objectID); }
</span><span class="cx"> 
</span><del>-    static Mutex&amp; mapLock();
</del><ins>+    static Lock&amp; mapLock();
</ins><span class="cx">     static HashMap&lt;uintptr_t, AVFWrapper*&gt;&amp; 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&amp; AVFWrapper::mapLock()
</del><ins>+Lock&amp; 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, &quot;AVFWrapper::removeFromMap(%p %d)&quot;, 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, &quot;AVFWrapper::periodicTimeObserverCallback invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(context));
</span><span class="lines">@@ -1666,7 +1666,7 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;NotificationCallbackData&gt; notificationData { static_cast&lt;NotificationCallbackData*&gt;(context) };
</span><span class="cx"> 
</span><del>-    MutexLocker locker(mapLock());
</del><ins>+    LockHolder locker(mapLock());
</ins><span class="cx">     AVFWrapper* self = avfWrapperForCallbackContext(notificationData-&gt;m_context);
</span><span class="cx">     if (!self) {
</span><span class="cx">         LOG(Media, &quot;AVFWrapper::processNotification invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(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, &quot;AVFWrapper::loadPlayableCompletionCallback invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(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, &quot;AVFWrapper::loadMetadataCompletionCallback invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(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, &quot;AVFWrapper::seekCompletedCallback invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(context));
</span><span class="lines">@@ -1812,7 +1812,7 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;LegibleOutputData&gt; legibleOutputData(reinterpret_cast&lt;LegibleOutputData*&gt;(context));
</span><span class="cx"> 
</span><del>-    MutexLocker locker(mapLock());
</del><ins>+    LockHolder locker(mapLock());
</ins><span class="cx">     AVFWrapper* self = avfWrapperForCallbackContext(legibleOutputData-&gt;m_context);
</span><span class="cx">     if (!self) {
</span><span class="cx">         LOG(Media, &quot;AVFWrapper::processCue invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(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, &quot;AVFWrapper::legibleOutputCallback invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(context));
</span><span class="lines">@@ -1866,7 +1866,7 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;LoadRequestData&gt; loadRequestData(reinterpret_cast&lt;LoadRequestData*&gt;(context));
</span><span class="cx"> 
</span><del>-    MutexLocker locker(mapLock());
</del><ins>+    LockHolder locker(mapLock());
</ins><span class="cx">     AVFWrapper* self = avfWrapperForCallbackContext(loadRequestData-&gt;m_context);
</span><span class="cx">     if (!self) {
</span><span class="cx">         LOG(Media, &quot;AVFWrapper::processShouldWaitForLoadingOfResource invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(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, &quot;AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource invoked for deleted AVFWrapper %d&quot;, reinterpret_cast&lt;uintptr_t&gt;(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(&quot;[WebKit] InbandTextTrackPrivateGStreamer::notifyTrackOfSample&quot;, std::function&lt;void()&gt;(std::bind(&amp;InbandTextTrackPrivateGStreamer::notifyTrackOfSample, this)));
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> {
</span><span class="cx">     Vector&lt;GRefPtr&lt;GstSample&gt; &gt; 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 &quot;GRefPtrGStreamer.h&quot;
</span><span class="cx"> #include &quot;InbandTextTrackPrivate.h&quot;
</span><span class="cx"> #include &quot;TrackPrivateBaseGStreamer.h&quot;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/glib/GThreadSafeMainLoopSource.h&gt;
</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&lt;GRefPtr&lt;GstSample&gt; &gt; 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&lt;GstTagList&gt; tags;
</span><span class="cx">     g_object_get(m_pad.get(), &quot;tags&quot;, &amp;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&lt;GstTagList&gt; 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) &amp;&amp; USE(GSTREAMER) &amp;&amp; ENABLE(VIDEO_TRACK)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;GRefPtrGStreamer.h&quot;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="cx"> #include &lt;wtf/glib/GThreadSafeMainLoopSource.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</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&lt;GstTagList&gt; 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&lt;MediaPlayerListener*&gt;::const_iterator it = m_listeners.begin(); it != m_listeners.end(); ++it)
</span><span class="cx">         (*it)-&gt;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&lt;MediaPlayerListener*&gt; m_listeners;
</span><del>-    Mutex m_mutexListeners;
</del><ins>+    Lock m_mutexListeners;
</ins><span class="cx"> 
</span><span class="cx">     COMPtr&lt;IMFMediaSession&gt; m_mediaSession;
</span><span class="cx">     COMPtr&lt;IMFSourceResolver&gt; 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 &quot;IntRect.h&quot;
</span><span class="cx"> #include &quot;IntSize.h&quot;
</span><span class="cx"> #include &quot;Timer.h&quot;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/Noncopyable.h&gt;
</span><span class="cx"> #include &lt;wtf/Optional.h&gt;
</span><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</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-&gt;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() &amp;&amp; !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()-&gt;dropAllTiles();
</span><span class="cx">         activeTileGrid()-&gt;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-&gt;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-&gt;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&amp; 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()-&gt;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-&gt;dropAllTiles();
</span><span class="cx">     if (m_zoomedInTileGrid)
</span><span class="cx">         m_zoomedInTileGrid-&gt;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-&gt;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&lt;CGImageRef&gt; 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&lt;CGImageRef&gt; 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&amp; 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) &amp;&amp; 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&lt;IntRect&gt; 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 &quot;Timer.h&quot;
</span><span class="cx"> #include &lt;wtf/Deque.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #include &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="lines">@@ -75,7 +76,7 @@
</span><span class="cx">     Vector&lt;IntSize&gt; 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&amp; 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 &lt; 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() &amp;&amp; !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&amp; 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 == &quot;\r\n&quot; || header == &quot;\n&quot;) {
</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&lt;CurlDownload&gt; 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&lt;CURL*&gt; m_pendingHandleList;
</span><span class="cx">     Vector&lt;CURL*&gt; m_activeHandleList;
</span><span class="cx">     Vector&lt;CURL*&gt; 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-&gt;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-&gt;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&amp; qlPreviewConverterDictionaryMutex()
</del><ins>+static Lock&amp; qlPreviewConverterDictionaryMutex()
</ins><span class="cx"> {
</span><del>-    static NeverDestroyed&lt;Mutex&gt; mutex;
</del><ins>+    static NeverDestroyed&lt;Lock&gt; 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 : @&quot;&quot;) 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(&quot;PRAGMA max_page_count&quot;));
</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, &quot;PRAGMA max_page_count = &quot; + 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(&quot;PRAGMA page_size&quot;));
</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(&quot;PRAGMA freelist_count&quot;));
</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(&quot;PRAGMA page_count&quot;));
</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(&quot;PRAGMA incremental_vacuum&quot;)))
</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 &lt;functional&gt;
</span><span class="cx"> #include &lt;sqlite3.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="lines">@@ -106,7 +107,7 @@
</span><span class="cx">     
</span><span class="cx">     void setAuthorizer(PassRefPtr&lt;DatabaseAuthorizer&gt;);
</span><span class="cx"> 
</span><del>-    Mutex&amp; databaseMutex() { return m_lockingMutex; }
</del><ins>+    Lock&amp; 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&lt;DatabaseAuthorizer&gt; 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-&gt;m_scriptURL, m_startupData-&gt;m_userAgent, m_startupData-&gt;m_contentSecurityPolicy, m_startupData-&gt;m_contentSecurityPolicyType, m_startupData-&gt;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&amp; m_workerReportingProxy;
</span><span class="cx"> 
</span><span class="cx">         RefPtr&lt;WorkerGlobalScope&gt; m_workerGlobalScope;
</span><del>-        Mutex m_threadCreationMutex;
</del><ins>+        Lock m_threadCreationMutex;
</ins><span class="cx"> 
</span><span class="cx">         std::unique_ptr&lt;WorkerThreadStartupData&gt; 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  &lt;fpizlo@apple.com&gt;
+
+        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  &lt;achristensen@webkit.org&gt;
</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&lt;String, String&gt; 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 &lt;WebCore/SQLiteDatabase.h&gt;
</span><span class="cx"> #include &lt;WebCore/Timer.h&gt;
</span><ins>+#include &lt;wtf/Condition.h&gt;
</ins><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="cx"> #include &lt;wtf/text/StringHash.h&gt;
</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&lt;String, String&gt; 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&amp; 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-&gt;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-&gt;dispatchDidModifyOrigin(*it);
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; 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, &quot;*.localstorage&quot;);
</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(&quot;Unable to establish origin '%s' in the tracker&quot;, 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-&gt;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-&gt;dispatchDidModifyOrigin(statement.getColumnText(0));
</span><span class="cx">         }
</span><span class="lines">@@ -499,7 +499,7 @@
</span><span class="cx">     String originId = origin-&gt;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(&quot;Attempted to delete origin '%s' while it was being created\n&quot;, 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-&gt;dispatchDidModifyOrigin(originIdentifier);
</span><span class="cx">     }
</span><span class="lines">@@ -592,7 +592,7 @@
</span><span class="cx"> bool StorageTracker::canDeleteOrigin(const String&amp; 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-&gt;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&lt;String&gt; 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  &lt;fpizlo@apple.com&gt;
+
+        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  &lt;timothy_horton@apple.com&gt;
</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&amp; WebFixedPositionContentDataLock()
</del><ins>+static Lock&amp; 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-&gt;m_viewportConstrainedLayers.end();
</span><span class="cx">     for (LayerInfoMap::const_iterator it = _private-&gt;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-&gt;m_viewportConstrainedLayers.end();
</span><span class="cx">     for (LayerInfoMap::const_iterator it = _private-&gt;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&lt;CALayer *, std::unique_ptr&lt;WebCore::ViewportConstraints&gt;&gt;&amp;)layerMap stickyContainerMap:(WTF::HashMap&lt;CALayer*, CALayer*&gt;&amp;)stickyContainers
</span><span class="cx"> {
</span><del>-    MutexLocker lock(WebFixedPositionContentDataLock());
</del><ins>+    LockHolder lock(WebFixedPositionContentDataLock());
</ins><span class="cx"> 
</span><span class="cx">     _private-&gt;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-&gt;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-&gt;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  &lt;fpizlo@apple.com&gt;
+
+        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  &lt;jeffm@apple.com&gt;
</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&amp; transactionBackgroundTaskIdentifierLock()
</del><ins>+static Lock&amp; 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-&gt;pendingFixedPositionLayoutRectMutex);
</del><ins>+        LockHolder locker(_private-&gt;pendingFixedPositionLayoutRectMutex);
</ins><span class="cx">         if (CGRectIsNull(_private-&gt;pendingFixedPositionLayoutRect))
</span><span class="cx">             return;
</span><span class="cx">         newRect = enclosingIntRect(_private-&gt;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-&gt;pendingFixedPositionLayoutRectMutex);
</del><ins>+        LockHolder locker(_private-&gt;pendingFixedPositionLayoutRectMutex);
</ins><span class="cx">         _private-&gt;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-&gt;pendingFixedPositionLayoutRectMutex);
</del><ins>+        LockHolder locker(_private-&gt;pendingFixedPositionLayoutRectMutex);
</ins><span class="cx">         _private-&gt;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-&gt;pendingFixedPositionLayoutRectMutex);
</del><ins>+    LockHolder locker(_private-&gt;pendingFixedPositionLayoutRectMutex);
</ins><span class="cx">     if (CGRectIsNull(_private-&gt;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 &lt;WebCore/LayerFlushSchedulerClient.h&gt;
</span><span class="cx"> #import &lt;WebCore/WebCoreKeyboardUIMode.h&gt;
</span><span class="cx"> #import &lt;wtf/HashMap.h&gt;
</span><ins>+#import &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="cx"> #import &lt;wtf/text/WTFString.h&gt;
</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  &lt;fpizlo@apple.com&gt;
+
+        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  &lt;peavo@outlook.com&gt;
</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&lt;Call&gt;());
</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&amp; 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 &lt;wtf/Deque.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> #include &lt;wtf/Threading.h&gt;
</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 &quot;this queued notification is the didRemoveAllIcons notification&quot;
</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&amp; 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&lt;String&gt; queue;
</span><span class="cx">     {
</span><del>-        MutexLocker locker(m_sharedWebIconDatabase-&gt;m_notificationMutex);
</del><ins>+        LockHolder locker(m_sharedWebIconDatabase-&gt;m_notificationMutex);
</ins><span class="cx">         queue.swap(m_sharedWebIconDatabase-&gt;m_notificationQueue);
</span><span class="cx">         m_sharedWebIconDatabase-&gt;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 &lt;WebCore/IconDatabaseClient.h&gt;
</span><span class="cx"> #include &lt;WebCore/IntSize.h&gt;
</span><span class="cx"> #include &lt;WebCore/IntSizeHash.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
+#include &lt;wtf/Threading.h&gt;
</ins><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><del>-#include &lt;wtf/Threading.h&gt;
</del><span class="cx"> 
</span><span class="cx"> #include &lt;windows.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -116,7 +117,7 @@
</span><span class="cx">     HashMap&lt;IntSize, HBITMAP&gt; m_defaultIconMap;
</span><span class="cx">     HashMap&lt;IntSize, HBITMAP&gt; m_sharedIconMap;
</span><span class="cx"> 
</span><del>-    Mutex m_notificationMutex;
</del><ins>+    Lock m_notificationMutex;
</ins><span class="cx">     Vector&lt;String&gt; 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 &lt;wtf/Assertions.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/StdLibExtras.h&gt;
</span><span class="cx"> #include &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="lines">@@ -44,9 +45,9 @@
</span><span class="cx"> 
</span><span class="cx"> typedef HashMap&lt;String, LocalizedString*&gt; LocalizedStringMap;
</span><span class="cx"> 
</span><del>-static Mutex&amp; mainBundleLocStringsMutex()
</del><ins>+static Lock&amp; 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&amp; frameworkLocStringsMutex()
</del><ins>+static Lock&amp; 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&amp; 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-&gt;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&amp; 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  &lt;fpizlo@apple.com&gt;
+
+        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  &lt;achristensen@webkit.org&gt;
</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&lt;AsyncTask&gt; 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&lt;UniqueIDBDatabaseIdentifier, RefPtr&lt;UniqueIDBDatabase&gt;&gt; m_idbDatabases;
</span><span class="cx"> 
</span><span class="cx">     Deque&lt;std::unique_ptr&lt;AsyncTask&gt;&gt; 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 &amp;&amp; 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&lt;AsyncTask&gt; 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 &amp;&amp; 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&lt;AsyncTask&gt; 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&lt;UniqueIDBDatabaseBackingStore&gt; m_backingStore;
</span><span class="cx"> 
</span><span class="cx">     Deque&lt;std::unique_ptr&lt;AsyncTask&gt;&gt; m_databaseTasks;
</span><del>-    Mutex m_databaseTaskMutex;
</del><ins>+    Lock m_databaseTaskMutex;
</ins><span class="cx"> 
</span><span class="cx">     Deque&lt;std::unique_ptr&lt;AsyncTask&gt;&gt; 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&lt;MessageDecoder&gt; 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 &lt;wtf/Deque.h&gt;
</span><span class="cx"> #include &lt;wtf/Forward.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/WorkQueue.h&gt;
</span><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</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&lt;PendingSyncReply&gt; 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 &lt;WebCore/Timer.h&gt;
</span><span class="cx"> #include &lt;functional&gt;
</span><span class="cx"> #include &lt;wtf/HashSet.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RunLoop.h&gt;
</span><span class="cx"> #include &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</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&lt;std::function&lt;void()&gt;&gt; m_renderQueue;
</span><del>-    Mutex m_renderQueueMutex;
</del><ins>+    Lock m_renderQueueMutex;
</ins><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;WebCore::TextureMapper&gt; 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, &quot;WebCore: ThreadedCompositor&quot;);
</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&lt;CompositingRunLoop&gt;([&amp;] {
</span><span class="cx">             renderLayerTree();
</span><span class="lines">@@ -321,7 +321,7 @@
</span><span class="cx">     m_scene-&gt;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-&gt;detach();
</span><span class="cx">     m_compositingRunLoop-&gt;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&amp; 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&amp; 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&lt;WKCustomProtocol&gt; 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&lt;String&gt; m_registeredSchemes;
</span><del>-    Mutex m_registeredSchemesMutex;
</del><ins>+    Lock m_registeredSchemesMutex;
</ins><span class="cx"> 
</span><span class="cx">     typedef HashMap&lt;uint64_t, RetainPtr&lt;WKCustomProtocol&gt;&gt; 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&lt;String, int&gt; 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-&gt;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-&gt;pluginProcessToken()));
</span><span class="cx">         
</span><span class="cx">         m_tokensAndConnections.remove(pluginProcessConnection-&gt;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&lt;RefPtr&lt;PluginProcessConnection&gt;&gt; m_pluginProcessConnections;
</span><span class="cx"> 
</span><del>-    Mutex m_tokensAndConnectionsMutex;
</del><ins>+    Lock m_tokensAndConnectionsMutex;
</ins><span class="cx">     HashMap&lt;uint64_t, RefPtr&lt;IPC::Connection&gt;&gt; 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-&gt;corePage()-&gt;scrollingCoordinator());
</span><span class="cx">     ASSERT(!m_scrollingTrees.contains(webPage-&gt;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-&gt;pageID()));
</span><span class="cx"> 
</span><span class="cx">     m_scrollingTrees.remove(webPage-&gt;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&lt;ThreadedScrollingTree&gt; 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&lt;WorkQueue&gt; 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&lt;uint64_t, RefPtr&lt;WebCore::ThreadedScrollingTree&gt;&gt; m_scrollingTrees;
</span><span class="cx"> #endif
</span><span class="cx">     std::unique_ptr&lt;WebCore::WheelEventDeltaTracker&gt; 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 &quot;config.h&quot;
</span><span class="cx"> #include &quot;WebKitSoupRequestInputStream.h&quot;
</span><span class="cx"> 
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="cx"> #include &lt;wtf/glib/GRefPtr.h&gt;
</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&lt;AsyncReadData&gt; 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&lt;GTask&gt; task = adoptGRef(g_task_new(stream, cancellable, callback, userData));
</span><span class="cx"> 
</span><del>-    MutexLocker locker(stream-&gt;priv-&gt;readLock);
</del><ins>+    LockHolder locker(stream-&gt;priv-&gt;readLock);
</ins><span class="cx"> 
</span><span class="cx">     if (!webkitSoupRequestInputStreamHasDataToRead(stream) &amp;&amp; !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-&gt;priv-&gt;readLock);
</del><ins>+    LockHolder locker(stream-&gt;priv-&gt;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  &lt;fpizlo@apple.com&gt;
+
+        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  &lt;commit-queue@webkit.org&gt;
</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 &lt;stdlib.h&gt;
</span><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="cx"> #include &lt;wtf/HashSet.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="cx"> #include &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</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&amp; javaScriptThreadsMutex()
</del><ins>+static Lock&amp; 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, &amp;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 &lt; 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 &lt; javaScriptThreadsCount; ++i)
</span><span class="cx">         javaScriptThreads().add(createThread(&amp;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&lt;ThreadIdentifier, javaScriptThreadsCount&gt; 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 &amp;&amp; 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 &quot;config.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Test.h&quot;
</span><ins>+#include &lt;wtf/Condition.h&gt;
+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> #include &lt;wtf/WorkQueue.h&gt;
</span><span class="cx"> #include &lt;string&gt;
</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&lt;std::string&gt; 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-&gt;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-&gt;dispatch([&amp;](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-&gt;dispatch([&amp;](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-&gt;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&lt;std::string&gt; 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-&gt;refCount());
</span><span class="cx">     EXPECT_EQ(1, queue2-&gt;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-&gt;dispatch([&amp;](void) {
</span><span class="cx">         m_functionCallOrder.append(simpleTestLabel);
</span><span class="lines">@@ -120,22 +122,22 @@
</span><span class="cx">     queue2-&gt;dispatch([&amp;](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-&gt;dispatch([&amp;](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&lt;std::string&gt; 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(&quot;com.apple.WebKit.Test.dispatchAfter&quot;);
</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-&gt;dispatch([&amp;](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-&gt;dispatchAfter(std::chrono::milliseconds(500), [&amp;](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&lt;char&gt; currentDirectory(g_get_current_dir());
</span><span class="cx">     GRefPtr&lt;GFile&gt; 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-&gt;dispatch([&amp;](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&lt;TestingContext*&gt;(userData);
</span><del>-                MutexLocker locker(context-&gt;m_lock);
</del><ins>+                LockHolder locker(context-&gt;m_lock);
</ins><span class="cx">                 EXPECT_EQ(g_main_context_get_thread_default(), context-&gt;m_mainContext);
</span><span class="cx">                 context-&gt;m_testCompleted.signal();
</span><span class="cx">             }, &amp;context);
</span></span></pre>
</div>
</div>

</body>
</html>