<!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>[188642] trunk/Source</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/188642">188642</a></dd>
<dt>Author</dt> <dd>fpizlo@apple.com</dd>
<dt>Date</dt> <dd>2015-08-19 11:18:19 -0700 (Wed, 19 Aug 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition
https://bugs.webkit.org/show_bug.cgi?id=148140

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

* inspector/remote/RemoteInspector.h:
* inspector/remote/RemoteInspector.mm:
(Inspector::RemoteInspector::registerDebuggable):
(Inspector::RemoteInspector::unregisterDebuggable):
(Inspector::RemoteInspector::updateDebuggable):
(Inspector::RemoteInspector::updateDebuggableAutomaticInspectCandidate):
(Inspector::RemoteInspector::sendMessageToRemoteFrontend):
(Inspector::RemoteInspector::setupFailed):
(Inspector::RemoteInspector::setupCompleted):
(Inspector::RemoteInspector::start):
(Inspector::RemoteInspector::stop):
(Inspector::RemoteInspector::setupXPCConnectionIfNeeded):
(Inspector::RemoteInspector::setParentProcessInformation):
(Inspector::RemoteInspector::xpcConnectionReceivedMessage):
(Inspector::RemoteInspector::xpcConnectionFailed):
(Inspector::RemoteInspector::pushListingSoon):
(Inspector::RemoteInspector::receivedIndicateMessage):
(Inspector::RemoteInspector::receivedProxyApplicationSetupMessage):
* inspector/remote/RemoteInspectorXPCConnection.h:
* inspector/remote/RemoteInspectorXPCConnection.mm:
(Inspector::RemoteInspectorXPCConnection::close):
(Inspector::RemoteInspectorXPCConnection::closeFromMessage):
(Inspector::RemoteInspectorXPCConnection::deserializeMessage):
(Inspector::RemoteInspectorXPCConnection::handleEvent):

Source/WebCore:

No new tests because no new behavior.

* Modules/webaudio/AudioBufferSourceNode.cpp:
(WebCore::AudioBufferSourceNode::process):
(WebCore::AudioBufferSourceNode::setBuffer):
* Modules/webaudio/AudioBufferSourceNode.h:
* Modules/webaudio/AudioParamTimeline.cpp:
(WebCore::AudioParamTimeline::insertEvent):
(WebCore::AudioParamTimeline::cancelScheduledValues):
(WebCore::AudioParamTimeline::valueForContextTime):
(WebCore::AudioParamTimeline::valuesForTimeRange):
* Modules/webaudio/AudioParamTimeline.h:
* Modules/webaudio/ConvolverNode.cpp:
(WebCore::ConvolverNode::process):
(WebCore::ConvolverNode::reset):
(WebCore::ConvolverNode::setBuffer):
* Modules/webaudio/ConvolverNode.h:
* Modules/webaudio/MediaElementAudioSourceNode.cpp:
(WebCore::MediaElementAudioSourceNode::process):
* Modules/webaudio/MediaElementAudioSourceNode.h:
* Modules/webaudio/MediaStreamAudioSourceNode.cpp:
(WebCore::MediaStreamAudioSourceNode::setFormat):
(WebCore::MediaStreamAudioSourceNode::process):
* Modules/webaudio/MediaStreamAudioSourceNode.h:
* Modules/webaudio/OscillatorNode.cpp:
(WebCore::OscillatorNode::process):
(WebCore::OscillatorNode::setPeriodicWave):
* Modules/webaudio/OscillatorNode.h:
* Modules/webaudio/PannerNode.cpp:
(WebCore::PannerNode::process):
(WebCore::PannerNode::setPanningModel):
* Modules/webaudio/PannerNode.h:
* Modules/webaudio/WaveShaperProcessor.cpp:
(WebCore::WaveShaperProcessor::setCurve):
(WebCore::WaveShaperProcessor::setOversample):
(WebCore::WaveShaperProcessor::process):
* Modules/webaudio/WaveShaperProcessor.h:
* Modules/webdatabase/Database.cpp:
(WebCore::retrieveTextResultFromDatabase):
(WebCore::guidToVersionMap):
(WebCore::Database::Database):
(WebCore::Database::performOpenAndVerify):
(WebCore::Database::closeDatabase):
(WebCore::Database::getCachedVersion):
(WebCore::Database::setCachedVersion):
(WebCore::guidMutex): Deleted.
* Modules/webdatabase/DatabaseManager.cpp:
(WebCore::DatabaseManager::existingDatabaseContextFor):
(WebCore::DatabaseManager::registerDatabaseContext):
(WebCore::DatabaseManager::unregisterDatabaseContext):
(WebCore::DatabaseManager::didConstructDatabaseContext):
(WebCore::DatabaseManager::didDestructDatabaseContext):
(WebCore::DatabaseManager::addProposedDatabase):
(WebCore::DatabaseManager::removeProposedDatabase):
(WebCore::DatabaseManager::fullPathForDatabase):
(WebCore::DatabaseManager::detailsForNameAndOrigin):
* Modules/webdatabase/DatabaseManager.h:
* bindings/objc/DOMInternal.mm:
(getDOMWrapper):
(addDOMWrapper):
(removeDOMWrapper):
(wrapperCacheLock): Deleted.
* crypto/CryptoAlgorithmRegistry.cpp:
(WebCore::CryptoAlgorithmRegistry::singleton):
(WebCore::CryptoAlgorithmRegistry::CryptoAlgorithmRegistry):
(WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
(WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
(WebCore::CryptoAlgorithmRegistry::create):
(WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
(WebCore::registryMutex): Deleted.
* inspector/WorkerDebuggerAgent.cpp:
(WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
(WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
(WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
* page/WheelEventTestTrigger.cpp:
(WebCore::WheelEventTestTrigger::clearAllTestDeferrals):
(WebCore::WheelEventTestTrigger::setTestCallbackAndStartNotificationTimer):
(WebCore::WheelEventTestTrigger::deferTestsForReason):
(WebCore::WheelEventTestTrigger::removeTestDeferralForReason):
(WebCore::WheelEventTestTrigger::triggerTestTimerFired):
* page/WheelEventTestTrigger.h:
* page/scrolling/ScrollingThread.cpp:
(WebCore::ScrollingThread::dispatch):
(WebCore::ScrollingThread::createThreadIfNeeded):
(WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
* page/scrolling/ScrollingThread.h:
* page/scrolling/mac/ScrollingThreadMac.mm:
(WebCore::ScrollingThread::initializeRunLoop):
* platform/audio/ReverbConvolver.cpp:
(WebCore::ReverbConvolver::~ReverbConvolver):
(WebCore::ReverbConvolver::backgroundThreadEntry):
(WebCore::ReverbConvolver::process):
(WebCore::ReverbConvolver::reset):
* platform/audio/ReverbConvolver.h:
* platform/ios/wak/WebCoreThreadRun.cpp:
* platform/mac/Language.mm:
(WebCore::preferredLanguages):
(+[WebLanguageChangeObserver languagePreferencesDidChange:]):
(WebCore::platformUserPreferredLanguages):
(WebCore::preferredLanguagesMutex): Deleted.
* platform/network/cf/LoaderRunLoopCF.cpp:
(WebCore::emptyPerform):
(WebCore::runLoaderThread):
(WebCore::loaderRunLoop):
(WebCore::loaderRunLoopMutex): Deleted.
(WebCore::loaderRunLoopConditionVariable): Deleted.
* platform/network/cf/SocketStreamHandleCFNet.cpp:
(WebCore::callOnMainThreadAndWait):
* platform/network/curl/SocketStreamHandle.h:
* platform/network/curl/SocketStreamHandleCurl.cpp:
(WebCore::SocketStreamHandle::platformSend):
(WebCore::SocketStreamHandle::sendData):
* platform/sql/SQLiteDatabaseTracker.cpp:
(WebCore::SQLiteDatabaseTracker::setClient):
(WebCore::SQLiteDatabaseTracker::incrementTransactionInProgressCount):
(WebCore::SQLiteDatabaseTracker::decrementTransactionInProgressCount):
(WebCore::SQLiteDatabaseTracker::transactionInProgressMutex): Deleted.
* platform/text/TextBreakIterator.cpp:
(WebCore::compareAndSwapNonSharedCharacterBreakIterator):
* platform/text/TextEncodingRegistry.cpp:
(WebCore::newTextCodec):
(WebCore::atomicCanonicalTextEncodingName):
(WebCore::dumpTextEncodingNameMap):
(WebCore::encodingRegistryMutex): Deleted.
* workers/WorkerThread.cpp:
(WebCore::workerThreads):
(WebCore::WorkerThread::workerThreadCount):
(WebCore::WorkerThread::WorkerThread):
(WebCore::WorkerThread::~WorkerThread):
(WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):
(WebCore::threadSetMutex): Deleted.

Source/WebKit2:

* NetworkProcess/cache/NetworkCacheStorage.cpp:
(WebKit::NetworkCache::Storage::traverse):
* Platform/IPC/Connection.cpp:
(IPC::Connection::SyncMessageState::processIncomingMessage):
(IPC::Connection::SyncMessageState::dispatchMessages):
(IPC::Connection::SyncMessageState::dispatchMessageAndResetDidScheduleDispatchMessagesForConnection):
(IPC::Connection::sendMessage):
(IPC::Connection::waitForMessage):
(IPC::Connection::processIncomingMessage):
(IPC::Connection::installIncomingSyncMessageCallback):
(IPC::Connection::uninstallIncomingSyncMessageCallback):
(IPC::Connection::hasIncomingSyncMessage):
(IPC::Connection::connectionDidClose):
(IPC::Connection::sendOutgoingMessages):
(IPC::Connection::enqueueIncomingMessage):
(IPC::Connection::dispatchOneMessage):
* Platform/IPC/Connection.h:
* Shared/BlockingResponseMap.h:
(BlockingResponseMap::waitForResponse):
(BlockingResponseMap::didReceiveResponse):
(BlockingResponseMap::cancel):
* UIProcess/Plugins/gtk/PluginInfoCache.cpp:
(WebKit::PluginInfoCache::saveToFile):
(WebKit::PluginInfoCache::updatePluginInfo):
* UIProcess/Plugins/gtk/PluginInfoCache.h:
* UIProcess/mac/WKPrintingView.h:
* UIProcess/mac/WKPrintingView.mm:
(-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
(prepareDataForPrintingOnSecondaryThread):
(-[WKPrintingView knowsPageRange:]):

Source/WTF:

Also beef up Condition by giving it a StaticCondition variant.

* wtf/Condition.h:
(WTF::ConditionBase::notifyAll):
(WTF::ConditionBase::waitForSecondsImpl):
(WTF::ConditionBase::absoluteFromRelative):
(WTF::Condition::Condition):
(WTF::Condition::notifyAll): Deleted.
(WTF::Condition::waitForSecondsImpl): Deleted.
(WTF::Condition::absoluteFromRelative): Deleted.
* wtf/CryptographicallyRandomNumber.cpp:
* wtf/HashTable.cpp:
(WTF::HashTableStats::recordCollisionAtCount):
(WTF::HashTableStats::dumpStats):
(WTF::hashTableStatsMutex): Deleted.
* wtf/HashTable.h:
(WTF::KeyTraits&gt;::HashTable):
(WTF::KeyTraits&gt;::invalidateIterators):
(WTF::addIterator):
(WTF::removeIterator):
* wtf/Lock.h:
* wtf/MainThread.cpp:
(WTF::functionQueue):
(WTF::dispatchFunctionsFromMainThread):
(WTF::callOnMainThread):
(WTF::cancelCallOnMainThread):
(WTF::mainThreadFunctionQueueMutex): Deleted.
* wtf/StackStats.cpp:
(WTF::StackStats::PerThreadStats::PerThreadStats):
(WTF::StackStats::CheckPoint::CheckPoint):
(WTF::StackStats::CheckPoint::~CheckPoint):
(WTF::StackStats::probe):
(WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
(WTF::StackStats::LayoutCheckPoint::~LayoutCheckPoint):
(WTF::StackStats::initialize): Deleted.
* wtf/StackStats.h:
(WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
(WTF::StackStats::probe):
(WTF::StackStats::initialize): Deleted.
* wtf/ThreadingPthreads.cpp:
(WTF::initializeThreading):
* wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
(WTF::callOnMainThread):
(WTF::lockAtomicallyInitializedStaticMutex):
(WTF::unlockAtomicallyInitializedStaticMutex):
(WTF::atomicallyInitializedStaticMutex): Deleted.
* wtf/text/StringView.cpp:
(WTF::StringView::UnderlyingString::UnderlyingString):
(WTF::underlyingStrings):
(WTF::StringView::invalidate):
(WTF::StringView::adoptUnderlyingString):
(WTF::StringView::setUnderlyingString):
(WTF::underlyingStringsMutex): Deleted.
* wtf/unicode/icu/CollatorICU.cpp:
(WTF::Collator::Collator):
(WTF::Collator::~Collator):
(WTF::cachedCollatorMutex): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorremoteRemoteInspectorh">trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorremoteRemoteInspectormm">trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.mm</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorremoteRemoteInspectorXPCConnectionh">trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorremoteRemoteInspectorXPCConnectionmm">trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.mm</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfConditionh">trunk/Source/WTF/wtf/Condition.h</a></li>
<li><a href="#trunkSourceWTFwtfCryptographicallyRandomNumbercpp">trunk/Source/WTF/wtf/CryptographicallyRandomNumber.cpp</a></li>
<li><a href="#trunkSourceWTFwtfHashTablecpp">trunk/Source/WTF/wtf/HashTable.cpp</a></li>
<li><a href="#trunkSourceWTFwtfHashTableh">trunk/Source/WTF/wtf/HashTable.h</a></li>
<li><a href="#trunkSourceWTFwtfLockh">trunk/Source/WTF/wtf/Lock.h</a></li>
<li><a href="#trunkSourceWTFwtfMainThreadcpp">trunk/Source/WTF/wtf/MainThread.cpp</a></li>
<li><a href="#trunkSourceWTFwtfStackStatscpp">trunk/Source/WTF/wtf/StackStats.cpp</a></li>
<li><a href="#trunkSourceWTFwtfStackStatsh">trunk/Source/WTF/wtf/StackStats.h</a></li>
<li><a href="#trunkSourceWTFwtfThreadingPthreadscpp">trunk/Source/WTF/wtf/ThreadingPthreads.cpp</a></li>
<li><a href="#trunkSourceWTFwtfmacDeprecatedSymbolsUsedBySafarimm">trunk/Source/WTF/wtf/mac/DeprecatedSymbolsUsedBySafari.mm</a></li>
<li><a href="#trunkSourceWTFwtftextStringViewcpp">trunk/Source/WTF/wtf/text/StringView.cpp</a></li>
<li><a href="#trunkSourceWTFwtfunicodeicuCollatorICUcpp">trunk/Source/WTF/wtf/unicode/icu/CollatorICU.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioBufferSourceNodecpp">trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioBufferSourceNodeh">trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioParamTimelinecpp">trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioParamTimelineh">trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioConvolverNodecpp">trunk/Source/WebCore/Modules/webaudio/ConvolverNode.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioConvolverNodeh">trunk/Source/WebCore/Modules/webaudio/ConvolverNode.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioMediaElementAudioSourceNodecpp">trunk/Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioMediaElementAudioSourceNodeh">trunk/Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioMediaStreamAudioSourceNodecpp">trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioMediaStreamAudioSourceNodeh">trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioOscillatorNodecpp">trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioOscillatorNodeh">trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioPannerNodecpp">trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioPannerNodeh">trunk/Source/WebCore/Modules/webaudio/PannerNode.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioWaveShaperProcessorcpp">trunk/Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioWaveShaperProcessorh">trunk/Source/WebCore/Modules/webaudio/WaveShaperProcessor.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabasecpp">trunk/Source/WebCore/Modules/webdatabase/Database.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseManagercpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseManagerh">trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMInternalmm">trunk/Source/WebCore/bindings/objc/DOMInternal.mm</a></li>
<li><a href="#trunkSourceWebCorecryptoCryptoAlgorithmRegistrycpp">trunk/Source/WebCore/crypto/CryptoAlgorithmRegistry.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorWorkerDebuggerAgentcpp">trunk/Source/WebCore/inspector/WorkerDebuggerAgent.cpp</a></li>
<li><a href="#trunkSourceWebCorepageWheelEventTestTriggercpp">trunk/Source/WebCore/page/WheelEventTestTrigger.cpp</a></li>
<li><a href="#trunkSourceWebCorepageWheelEventTestTriggerh">trunk/Source/WebCore/page/WheelEventTestTrigger.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingThreadcpp">trunk/Source/WebCore/page/scrolling/ScrollingThread.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingThreadh">trunk/Source/WebCore/page/scrolling/ScrollingThread.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingThreadMacmm">trunk/Source/WebCore/page/scrolling/mac/ScrollingThreadMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformaudioReverbConvolvercpp">trunk/Source/WebCore/platform/audio/ReverbConvolver.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformaudioReverbConvolverh">trunk/Source/WebCore/platform/audio/ReverbConvolver.h</a></li>
<li><a href="#trunkSourceWebCoreplatformioswakWebCoreThreadRuncpp">trunk/Source/WebCore/platform/ios/wak/WebCoreThreadRun.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmacLanguagemm">trunk/Source/WebCore/platform/mac/Language.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcfLoaderRunLoopCFcpp">trunk/Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcfSocketStreamHandleCFNetcpp">trunk/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcurlSocketStreamHandleh">trunk/Source/WebCore/platform/network/curl/SocketStreamHandle.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkcurlSocketStreamHandleCurlcpp">trunk/Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformsqlSQLiteDatabaseTrackercpp">trunk/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformtextTextBreakIteratorcpp">trunk/Source/WebCore/platform/text/TextBreakIterator.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformtextTextEncodingRegistrycpp">trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerThreadcpp">trunk/Source/WebCore/workers/WorkerThread.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscacheNetworkCacheStoragecpp">trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp</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="#trunkSourceWebKit2SharedBlockingResponseMaph">trunk/Source/WebKit2/Shared/BlockingResponseMap.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessPluginsgtkPluginInfoCachecpp">trunk/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessPluginsgtkPluginInfoCacheh">trunk/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWKPrintingViewh">trunk/Source/WebKit2/UIProcess/mac/WKPrintingView.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWKPrintingViewmm">trunk/Source/WebKit2/UIProcess/mac/WKPrintingView.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,3 +1,35 @@
</span><ins>+2015-08-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
+        Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition
+        https://bugs.webkit.org/show_bug.cgi?id=148140
+
+        Reviewed by Geoffrey Garen.
+
+        * inspector/remote/RemoteInspector.h:
+        * inspector/remote/RemoteInspector.mm:
+        (Inspector::RemoteInspector::registerDebuggable):
+        (Inspector::RemoteInspector::unregisterDebuggable):
+        (Inspector::RemoteInspector::updateDebuggable):
+        (Inspector::RemoteInspector::updateDebuggableAutomaticInspectCandidate):
+        (Inspector::RemoteInspector::sendMessageToRemoteFrontend):
+        (Inspector::RemoteInspector::setupFailed):
+        (Inspector::RemoteInspector::setupCompleted):
+        (Inspector::RemoteInspector::start):
+        (Inspector::RemoteInspector::stop):
+        (Inspector::RemoteInspector::setupXPCConnectionIfNeeded):
+        (Inspector::RemoteInspector::setParentProcessInformation):
+        (Inspector::RemoteInspector::xpcConnectionReceivedMessage):
+        (Inspector::RemoteInspector::xpcConnectionFailed):
+        (Inspector::RemoteInspector::pushListingSoon):
+        (Inspector::RemoteInspector::receivedIndicateMessage):
+        (Inspector::RemoteInspector::receivedProxyApplicationSetupMessage):
+        * inspector/remote/RemoteInspectorXPCConnection.h:
+        * inspector/remote/RemoteInspectorXPCConnection.mm:
+        (Inspector::RemoteInspectorXPCConnection::close):
+        (Inspector::RemoteInspectorXPCConnection::closeFromMessage):
+        (Inspector::RemoteInspectorXPCConnection::deserializeMessage):
+        (Inspector::RemoteInspectorXPCConnection::handleEvent):
+
</ins><span class="cx"> 2015-08-18  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Links for rules in &lt;style&gt; are incorrect, do not account for &lt;style&gt; offset in the document
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorremoteRemoteInspectorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #import &quot;RemoteInspectorXPCConnection.h&quot;
</span><span class="cx"> #import &lt;wtf/Forward.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"> 
</span><span class="cx"> OBJC_CLASS NSDictionary;
</span><span class="lines">@@ -108,7 +109,7 @@
</span><span class="cx">     // Any debuggable can send messages over the XPC connection.
</span><span class="cx">     // So lock access to all maps and state as they can change
</span><span class="cx">     // from any thread.
</span><del>-    std::mutex m_mutex;
</del><ins>+    Lock m_mutex;
</ins><span class="cx"> 
</span><span class="cx">     HashMap&lt;unsigned, std::pair&lt;RemoteInspectorDebuggable*, RemoteInspectorDebuggableInfo&gt;&gt; m_debuggableMap;
</span><span class="cx">     HashMap&lt;unsigned, RefPtr&lt;RemoteInspectorDebuggableConnection&gt;&gt; m_connectionMap;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorremoteRemoteInspectormm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.mm (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.mm        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/JavaScriptCore/inspector/remote/RemoteInspector.mm        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::registerDebuggable(RemoteInspectorDebuggable* debuggable)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     unsigned identifier = nextAvailableIdentifier();
</span><span class="cx">     debuggable-&gt;setIdentifier(identifier);
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::unregisterDebuggable(RemoteInspectorDebuggable* debuggable)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     unsigned identifier = debuggable-&gt;identifier();
</span><span class="cx">     if (!identifier)
</span><span class="lines">@@ -163,7 +163,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::updateDebuggable(RemoteInspectorDebuggable* debuggable)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     unsigned identifier = debuggable-&gt;identifier();
</span><span class="cx">     if (!identifier)
</span><span class="lines">@@ -178,7 +178,7 @@
</span><span class="cx"> void RemoteInspector::updateDebuggableAutomaticInspectCandidate(RemoteInspectorDebuggable* debuggable)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">         unsigned identifier = debuggable-&gt;identifier();
</span><span class="cx">         if (!identifier)
</span><span class="lines">@@ -213,7 +213,7 @@
</span><span class="cx"> 
</span><span class="cx">         // In case debuggers fail to respond, or we cannot connect to webinspectord, automatically continue after a short period of time.
</span><span class="cx">         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.8 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">             if (m_automaticInspectionCandidateIdentifier == identifier) {
</span><span class="cx">                 LOG_ERROR(&quot;Skipping Automatic Inspection Candidate with pageId(%u) because we failed to receive a response in time.&quot;, m_automaticInspectionCandidateIdentifier);
</span><span class="cx">                 m_automaticInspectionPaused = false;
</span><span class="lines">@@ -224,7 +224,7 @@
</span><span class="cx">     debuggable-&gt;pauseWaitingForAutomaticInspection();
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(m_automaticInspectionCandidateIdentifier);
</span><span class="cx">         m_automaticInspectionCandidateIdentifier = 0;
</span><span class="lines">@@ -245,7 +245,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::sendMessageToRemoteFrontend(unsigned identifier, const String&amp; message)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     if (!m_xpcConnection)
</span><span class="cx">         return;
</span><span class="lines">@@ -265,7 +265,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::setupFailed(unsigned identifier)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     m_connectionMap.remove(identifier);
</span><span class="cx"> 
</span><span class="lines">@@ -279,7 +279,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::setupCompleted(unsigned identifier)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     if (identifier == m_automaticInspectionCandidateIdentifier)
</span><span class="cx">         m_automaticInspectionPaused = false;
</span><span class="lines">@@ -293,7 +293,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::start()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     if (m_enabled)
</span><span class="cx">         return;
</span><span class="lines">@@ -315,7 +315,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::stop()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     stopInternal(StopSource::API);
</span><span class="cx"> }
</span><span class="lines">@@ -355,7 +355,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::setupXPCConnectionIfNeeded()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     if (m_xpcConnection)
</span><span class="cx">         return;
</span><span class="lines">@@ -380,7 +380,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::setParentProcessInformation(pid_t pid, RetainPtr&lt;CFDataRef&gt; auditData)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     if (m_parentProcessIdentifier || m_parentProcessAuditData)
</span><span class="cx">         return;
</span><span class="lines">@@ -396,7 +396,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::xpcConnectionReceivedMessage(RemoteInspectorXPCConnection*, NSString *messageName, NSDictionary *userInfo)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     if ([messageName isEqualToString:WIRPermissionDenied]) {
</span><span class="cx">         stopInternal(StopSource::XPCMessage);
</span><span class="lines">@@ -427,7 +427,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspector::xpcConnectionFailed(RemoteInspectorXPCConnection* connection)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(connection == m_xpcConnection);
</span><span class="cx">     if (connection != m_xpcConnection)
</span><span class="lines">@@ -522,7 +522,7 @@
</span><span class="cx"> 
</span><span class="cx">     m_pushScheduled = true;
</span><span class="cx">     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         if (m_pushScheduled)
</span><span class="cx">             pushListingNow();
</span><span class="cx">     });
</span><span class="lines">@@ -649,7 +649,7 @@
</span><span class="cx">     callOnWebThreadOrDispatchAsyncOnMainThread(^{
</span><span class="cx">         RemoteInspectorDebuggable* debuggable = nullptr;
</span><span class="cx">         {
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">             auto it = m_debuggableMap.find(identifier);
</span><span class="cx">             if (it == m_debuggableMap.end())
</span><span class="lines">@@ -672,7 +672,7 @@
</span><span class="cx">         // Wait a bit for the information, but give up after a second.
</span><span class="cx">         m_shouldSendParentProcessInformation = true;
</span><span class="cx">         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">             if (m_shouldSendParentProcessInformation)
</span><span class="cx">                 stopInternal(StopSource::XPCMessage);
</span><span class="cx">         });
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorremoteRemoteInspectorXPCConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> #define RemoteInspectorXPCConnection_h
</span><span class="cx"> 
</span><span class="cx"> #import &lt;dispatch/dispatch.h&gt;
</span><del>-#import &lt;mutex&gt;
</del><ins>+#import &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #import &lt;wtf/ThreadSafeRefCounted.h&gt;
</span><span class="cx"> #import &lt;wtf/spi/darwin/XPCSPI.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> 
</span><span class="cx">     // We handle XPC events on the queue, but a client may call close() on any queue.
</span><span class="cx">     // We make sure that m_client is thread safe and immediately cleared in close().
</span><del>-    std::mutex m_mutex;
</del><ins>+    Lock m_mutex;
</ins><span class="cx"> 
</span><span class="cx">     xpc_connection_t m_connection;
</span><span class="cx">     dispatch_queue_t m_queue;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorremoteRemoteInspectorXPCConnectionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.mm (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.mm        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/JavaScriptCore/inspector/remote/RemoteInspectorXPCConnection.mm        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -29,7 +29,9 @@
</span><span class="cx"> #if ENABLE(REMOTE_INSPECTOR)
</span><span class="cx"> 
</span><span class="cx"> #import &lt;Foundation/Foundation.h&gt;
</span><ins>+#import &lt;mutex&gt;
</ins><span class="cx"> #import &lt;wtf/Assertions.h&gt;
</span><ins>+#import &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #import &lt;wtf/Ref.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/spi/darwin/XPCSPI.h&gt;
</span><span class="lines">@@ -79,7 +81,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteInspectorXPCConnection::close()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">     closeFromMessage();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -89,7 +91,7 @@
</span><span class="cx">     m_client = nullptr;
</span><span class="cx"> 
</span><span class="cx">     dispatch_async(m_queue, ^{
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         // This will trigger one last XPC_ERROR_CONNECTION_INVALID event on the queue and deref us.
</span><span class="cx">         closeOnQueue();
</span><span class="cx">     });
</span><span class="lines">@@ -116,7 +118,7 @@
</span><span class="cx"> 
</span><span class="cx">     xpc_object_t xpcDictionary = xpc_dictionary_get_value(object, RemoteInspectorXPCConnectionSerializedMessageKey);
</span><span class="cx">     if (!xpcDictionary || xpc_get_type(xpcDictionary) != XPC_TYPE_DICTIONARY) {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         if (m_client)
</span><span class="cx">             m_client-&gt;xpcConnectionUnhandledMessage(this, object);
</span><span class="cx">         return nil;
</span><span class="lines">@@ -131,7 +133,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (xpc_get_type(object) == XPC_TYPE_ERROR) {
</span><span class="cx">         {
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">             if (m_client)
</span><span class="cx">                 m_client-&gt;xpcConnectionFailed(this);
</span><span class="cx"> 
</span><span class="lines">@@ -154,7 +156,7 @@
</span><span class="cx"> 
</span><span class="cx">     NSString *message = [dataDictionary objectForKey:RemoteInspectorXPCConnectionMessageNameKey];
</span><span class="cx">     NSDictionary *userInfo = [dataDictionary objectForKey:RemoteInspectorXPCConnectionUserInfoKey];
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">     if (m_client)
</span><span class="cx">         m_client-&gt;xpcConnectionReceivedMessage(this, message, userInfo);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/ChangeLog        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,3 +1,68 @@
</span><ins>+2015-08-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
+        Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition
+        https://bugs.webkit.org/show_bug.cgi?id=148140
+
+        Reviewed by Geoffrey Garen.
+
+        Also beef up Condition by giving it a StaticCondition variant.
+
+        * wtf/Condition.h:
+        (WTF::ConditionBase::notifyAll):
+        (WTF::ConditionBase::waitForSecondsImpl):
+        (WTF::ConditionBase::absoluteFromRelative):
+        (WTF::Condition::Condition):
+        (WTF::Condition::notifyAll): Deleted.
+        (WTF::Condition::waitForSecondsImpl): Deleted.
+        (WTF::Condition::absoluteFromRelative): Deleted.
+        * wtf/CryptographicallyRandomNumber.cpp:
+        * wtf/HashTable.cpp:
+        (WTF::HashTableStats::recordCollisionAtCount):
+        (WTF::HashTableStats::dumpStats):
+        (WTF::hashTableStatsMutex): Deleted.
+        * wtf/HashTable.h:
+        (WTF::KeyTraits&gt;::HashTable):
+        (WTF::KeyTraits&gt;::invalidateIterators):
+        (WTF::addIterator):
+        (WTF::removeIterator):
+        * wtf/Lock.h:
+        * wtf/MainThread.cpp:
+        (WTF::functionQueue):
+        (WTF::dispatchFunctionsFromMainThread):
+        (WTF::callOnMainThread):
+        (WTF::cancelCallOnMainThread):
+        (WTF::mainThreadFunctionQueueMutex): Deleted.
+        * wtf/StackStats.cpp:
+        (WTF::StackStats::PerThreadStats::PerThreadStats):
+        (WTF::StackStats::CheckPoint::CheckPoint):
+        (WTF::StackStats::CheckPoint::~CheckPoint):
+        (WTF::StackStats::probe):
+        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
+        (WTF::StackStats::LayoutCheckPoint::~LayoutCheckPoint):
+        (WTF::StackStats::initialize): Deleted.
+        * wtf/StackStats.h:
+        (WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):
+        (WTF::StackStats::probe):
+        (WTF::StackStats::initialize): Deleted.
+        * wtf/ThreadingPthreads.cpp:
+        (WTF::initializeThreading):
+        * wtf/mac/DeprecatedSymbolsUsedBySafari.mm:
+        (WTF::callOnMainThread):
+        (WTF::lockAtomicallyInitializedStaticMutex):
+        (WTF::unlockAtomicallyInitializedStaticMutex):
+        (WTF::atomicallyInitializedStaticMutex): Deleted.
+        * wtf/text/StringView.cpp:
+        (WTF::StringView::UnderlyingString::UnderlyingString):
+        (WTF::underlyingStrings):
+        (WTF::StringView::invalidate):
+        (WTF::StringView::adoptUnderlyingString):
+        (WTF::StringView::setUnderlyingString):
+        (WTF::underlyingStringsMutex): Deleted.
+        * wtf/unicode/icu/CollatorICU.cpp:
+        (WTF::Collator::Collator):
+        (WTF::Collator::~Collator):
+        (WTF::cachedCollatorMutex): Deleted.
+
</ins><span class="cx"> 2015-08-18  Zan Dobersek  &lt;zdobersek@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GLib] GMainLoopSource should receive the std::function&lt;&gt; objects through rvalue references
</span></span></pre></div>
<a id="trunkSourceWTFwtfConditionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Condition.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Condition.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/Condition.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -28,21 +28,26 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;chrono&gt;
</span><span class="cx"> #include &lt;functional&gt;
</span><del>-#include &lt;mutex&gt;
</del><span class="cx"> #include &lt;wtf/CurrentTime.h&gt;
</span><ins>+#include &lt;wtf/Noncopyable.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><del>-class Condition {
-public:
</del><ins>+// This is a condition variable that is suitable for use with any lock-like object, including
+// our own WTF::Lock. It features standard wait()/notifyOne()/notifyAll() methods in addition to
+// a variety of wait-with-timeout methods. This includes methods that use WTF's own notion of
+// time, like wall-clock time (i.e. currentTime()) and monotonic time (i.e.
+// monotonicallyIncreasingTime()). This is a very efficient condition variable. It only requires
+// one byte of memory. notifyOne() and notifyAll() require just a load and branch for the fast
+// case where no thread is waiting. This condition variable, when used with WTF::Lock, can
+// outperform a system condition variable and lock by up to 58x.
+
+// This is a struct without a constructor or destructor so that it can be statically initialized.
+// Use Lock in instance variables.
+struct ConditionBase {
</ins><span class="cx">     typedef ParkingLot::Clock Clock;
</span><span class="cx">     
</span><del>-    Condition()
-    {
-        m_hasWaiters.store(false);
-    }
-
</del><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><span class="cx">     // notifyOne() or notifyAll(). Returns false if we woke up due to a timeout. Note that this form
</span><span class="lines">@@ -172,7 +177,7 @@
</span><span class="cx">         ParkingLot::unparkAll(&amp;m_hasWaiters);
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-private:
</del><ins>+protected:
</ins><span class="cx">     template&lt;typename LockType&gt;
</span><span class="cx">     bool waitForSecondsImpl(LockType&amp; lock, double relativeTimeoutSeconds)
</span><span class="cx">     {
</span><span class="lines">@@ -224,11 +229,23 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     Atomic&lt;bool&gt; m_hasWaiters;
</span><ins>+};    
+
+class Condition : public ConditionBase {
+    WTF_MAKE_NONCOPYABLE(Condition);
+public:
+    Condition()
+    {
+        m_hasWaiters.store(false);
+    }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><ins>+typedef ConditionBase StaticCondition;
+
</ins><span class="cx"> } // namespace WTF
</span><span class="cx"> 
</span><span class="cx"> using WTF::Condition;
</span><ins>+using WTF::StaticCondition;
</ins><span class="cx"> 
</span><span class="cx"> #endif // WTF_Condition_h
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWTFwtfCryptographicallyRandomNumbercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/CryptographicallyRandomNumber.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/CryptographicallyRandomNumber.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/CryptographicallyRandomNumber.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include &quot;NeverDestroyed.h&quot;
</span><span class="cx"> #include &quot;OSRandomSource.h&quot;
</span><span class="cx"> #include &lt;mutex&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> namespace WTF {
</span><span class="cx"> 
</span><span class="lines">@@ -64,7 +65,7 @@
</span><span class="cx"> 
</span><span class="cx">     ARC4Stream m_stream;
</span><span class="cx">     int m_count;
</span><del>-    std::mutex m_mutex;
</del><ins>+    Lock m_mutex;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> ARC4Stream::ARC4Stream()
</span><span class="lines">@@ -136,7 +137,7 @@
</span><span class="cx"> 
</span><span class="cx"> uint32_t ARC4RandomNumberGenerator::randomNumber()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     m_count -= 4;
</span><span class="cx">     stirIfNeeded();
</span><span class="lines">@@ -145,7 +146,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ARC4RandomNumberGenerator::randomValues(void* buffer, size_t length)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     unsigned char* result = reinterpret_cast&lt;unsigned char*&gt;(buffer);
</span><span class="cx">     stirIfNeeded();
</span></span></pre></div>
<a id="trunkSourceWTFwtfHashTablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/HashTable.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/HashTable.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/HashTable.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -36,20 +36,11 @@
</span><span class="cx"> unsigned HashTableStats::collisionGraph[4096];
</span><span class="cx"> unsigned HashTableStats::maxCollisions;
</span><span class="cx"> 
</span><del>-static std::mutex&amp; hashTableStatsMutex()
-{
-    static std::once_flag onceFlag;
-    static std::mutex* mutex;
-    std::call_once(onceFlag, []{
-        mutex = std::make_unique&lt;std::mutex&gt;().release();
-    });
</del><ins>+static StaticLock hashTableStatsMutex;
</ins><span class="cx"> 
</span><del>-    return *mutex;
-}
-
</del><span class="cx"> void HashTableStats::recordCollisionAtCount(unsigned count)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(hashTableStatsMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(hashTableStatsMutex);
</ins><span class="cx"> 
</span><span class="cx">     if (count &gt; maxCollisions)
</span><span class="cx">         maxCollisions = count;
</span><span class="lines">@@ -59,7 +50,7 @@
</span><span class="cx"> 
</span><span class="cx"> void HashTableStats::dumpStats()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(hashTableStatsMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(hashTableStatsMutex);
</ins><span class="cx"> 
</span><span class="cx">     dataLogF(&quot;\nWTF::HashTable statistics\n\n&quot;);
</span><span class="cx">     dataLogF(&quot;%u accesses\n&quot;, numAccesses.load());
</span></span></pre></div>
<a id="trunkSourceWTFwtfHashTableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/HashTable.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/HashTable.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/HashTable.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012, 2015 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2008 David Levin &lt;levin@chromium.org&gt;
</span><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="cx"> #include &lt;wtf/FastMalloc.h&gt;
</span><span class="cx"> #include &lt;wtf/HashTraits.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/StdLibExtras.h&gt;
</span><span class="cx"> #include &lt;wtf/ValueCheck.h&gt;
</span><span class="lines">@@ -486,7 +487,7 @@
</span><span class="cx">         // All access to m_iterators should be guarded with m_mutex.
</span><span class="cx">         mutable const_iterator* m_iterators;
</span><span class="cx">         // Use std::unique_ptr so HashTable can still be memmove'd or memcpy'ed.
</span><del>-        mutable std::unique_ptr&lt;std::mutex&gt; m_mutex;
</del><ins>+        mutable std::unique_ptr&lt;Lock&gt; m_mutex;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if DUMP_HASHTABLE_STATS_PER_TABLE
</span><span class="lines">@@ -542,7 +543,7 @@
</span><span class="cx">         , m_deletedCount(0)
</span><span class="cx"> #if CHECK_HASHTABLE_ITERATORS
</span><span class="cx">         , m_iterators(0)
</span><del>-        , m_mutex(std::make_unique&lt;std::mutex&gt;())
</del><ins>+        , m_mutex(std::make_unique&lt;Lock&gt;())
</ins><span class="cx"> #endif
</span><span class="cx"> #if DUMP_HASHTABLE_STATS_PER_TABLE
</span><span class="cx">         , m_stats(std::make_unique&lt;Stats&gt;())
</span><span class="lines">@@ -1218,7 +1219,7 @@
</span><span class="cx">         , m_deletedCount(0)
</span><span class="cx"> #if CHECK_HASHTABLE_ITERATORS
</span><span class="cx">         , m_iterators(nullptr)
</span><del>-        , m_mutex(std::make_unique&lt;std::mutex&gt;())
</del><ins>+        , m_mutex(std::make_unique&lt;Lock&gt;())
</ins><span class="cx"> #endif
</span><span class="cx"> #if DUMP_HASHTABLE_STATS_PER_TABLE
</span><span class="cx">         , m_stats(std::make_unique&lt;Stats&gt;(*other.m_stats))
</span><span class="lines">@@ -1276,7 +1277,7 @@
</span><span class="cx">     inline HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::HashTable(HashTable&amp;&amp; other)
</span><span class="cx"> #if CHECK_HASHTABLE_ITERATORS
</span><span class="cx">         : m_iterators(nullptr)
</span><del>-        , m_mutex(std::make_unique&lt;std::mutex&gt;())
</del><ins>+        , m_mutex(std::make_unique&lt;Lock&gt;())
</ins><span class="cx"> #endif
</span><span class="cx">     {
</span><span class="cx">         other.invalidateIterators();
</span><span class="lines">@@ -1356,7 +1357,7 @@
</span><span class="cx">     template&lt;typename Key, typename Value, typename Extractor, typename HashFunctions, typename Traits, typename KeyTraits&gt;
</span><span class="cx">     void HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::invalidateIterators()
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(*m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(*m_mutex);
</ins><span class="cx">         const_iterator* next;
</span><span class="cx">         for (const_iterator* p = m_iterators; p; p = next) {
</span><span class="cx">             next = p-&gt;m_next;
</span><span class="lines">@@ -1378,7 +1379,7 @@
</span><span class="cx">         if (!table) {
</span><span class="cx">             it-&gt;m_next = 0;
</span><span class="cx">         } else {
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(*table-&gt;m_mutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(*table-&gt;m_mutex);
</ins><span class="cx">             ASSERT(table-&gt;m_iterators != it);
</span><span class="cx">             it-&gt;m_next = table-&gt;m_iterators;
</span><span class="cx">             table-&gt;m_iterators = it;
</span><span class="lines">@@ -1397,7 +1398,7 @@
</span><span class="cx">             ASSERT(!it-&gt;m_next);
</span><span class="cx">             ASSERT(!it-&gt;m_previous);
</span><span class="cx">         } else {
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(*it-&gt;m_table-&gt;m_mutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(*it-&gt;m_table-&gt;m_mutex);
</ins><span class="cx">             if (it-&gt;m_next) {
</span><span class="cx">                 ASSERT(it-&gt;m_next-&gt;m_previous == it);
</span><span class="cx">                 it-&gt;m_next-&gt;m_previous = it-&gt;m_previous;
</span></span></pre></div>
<a id="trunkSourceWTFwtfLockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Lock.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Lock.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/Lock.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -125,9 +125,9 @@
</span><span class="cx"> 
</span><span class="cx"> } // namespace WTF
</span><span class="cx"> 
</span><del>-using WTF::StaticLock;
</del><span class="cx"> using WTF::Lock;
</span><span class="cx"> using WTF::LockHolder;
</span><ins>+using WTF::StaticLock;
</ins><span class="cx"> 
</span><span class="cx"> #endif // WTF_Lock_h
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWTFwtfMainThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/MainThread.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/MainThread.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/MainThread.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2007, 2008, 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;StdLibExtras.h&quot;
</span><span class="cx"> #include &quot;Threading.h&quot;
</span><span class="cx"> #include &lt;mutex&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/ThreadSpecific.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -69,12 +70,7 @@
</span><span class="cx"> static ThreadIdentifier mainThreadIdentifier;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-static std::mutex&amp; mainThreadFunctionQueueMutex()
-{
-    static NeverDestroyed&lt;std::mutex&gt; mutex;
-    
-    return mutex;
-}
</del><ins>+static StaticLock mainThreadFunctionQueueMutex;
</ins><span class="cx"> 
</span><span class="cx"> static FunctionQueue&amp; functionQueue()
</span><span class="cx"> {
</span><span class="lines">@@ -94,7 +90,6 @@
</span><span class="cx"> 
</span><span class="cx">     mainThreadIdentifier = currentThread();
</span><span class="cx"> 
</span><del>-    mainThreadFunctionQueueMutex();
</del><span class="cx">     initializeMainThreadPlatform();
</span><span class="cx">     initializeGCThreads();
</span><span class="cx"> }
</span><span class="lines">@@ -105,7 +100,6 @@
</span><span class="cx"> 
</span><span class="cx"> static void initializeMainThreadOnce()
</span><span class="cx"> {
</span><del>-    mainThreadFunctionQueueMutex();
</del><span class="cx">     initializeMainThreadPlatform();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -117,7 +111,6 @@
</span><span class="cx"> #if !USE(WEB_THREAD)
</span><span class="cx"> static void initializeMainThreadToProcessMainThreadOnce()
</span><span class="cx"> {
</span><del>-    mainThreadFunctionQueueMutex();
</del><span class="cx">     initializeMainThreadToProcessMainThreadPlatform();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -156,7 +149,7 @@
</span><span class="cx">     FunctionWithContext invocation;
</span><span class="cx">     while (true) {
</span><span class="cx">         {
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(mainThreadFunctionQueueMutex());
</del><ins>+            std::lock_guard&lt;StaticLock&gt; lock(mainThreadFunctionQueueMutex);
</ins><span class="cx">             if (!functionQueue().size())
</span><span class="cx">                 break;
</span><span class="cx">             invocation = functionQueue().takeFirst();
</span><span class="lines">@@ -180,7 +173,7 @@
</span><span class="cx">     ASSERT(function);
</span><span class="cx">     bool needToSchedule = false;
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(mainThreadFunctionQueueMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; lock(mainThreadFunctionQueueMutex);
</ins><span class="cx">         needToSchedule = functionQueue().size() == 0;
</span><span class="cx">         functionQueue().append(FunctionWithContext(function, context));
</span><span class="cx">     }
</span><span class="lines">@@ -192,7 +185,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(function);
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(mainThreadFunctionQueueMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(mainThreadFunctionQueueMutex);
</ins><span class="cx"> 
</span><span class="cx">     FunctionWithContextFinder pred(FunctionWithContext(function, context));
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWTFwtfStackStatscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/StackStats.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/StackStats.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/StackStats.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx"> namespace WTF {
</span><span class="cx"> 
</span><span class="cx"> // CheckPoint management:
</span><del>-std::mutex* StackStats::s_sharedMutex = 0;
</del><ins>+StaticLock StackStats::s_sharedMutex;
</ins><span class="cx"> StackStats::CheckPoint* StackStats::s_topCheckPoint = 0;
</span><span class="cx"> StackStats::LayoutCheckPoint* StackStats::s_firstLayoutCheckPoint = 0;
</span><span class="cx"> StackStats::LayoutCheckPoint* StackStats::s_topLayoutCheckPoint = 0;
</span><span class="lines">@@ -57,13 +57,6 @@
</span><span class="cx"> int StackStats::s_maxLayoutReentryDepth = 0;
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-// Initializes locks and the log. Should only be called once.
-void StackStats::initialize()
-{
-    s_sharedMutex = std::make_unique&lt;std::mutex&gt;().release();
-    dataLogF(&quot; === LOG new stack stats ========\n&quot;);
-}
-
</del><span class="cx"> StackStats::PerThreadStats::PerThreadStats()
</span><span class="cx"> {
</span><span class="cx">     const StackBounds&amp; stack = wtfThreadData().stack();
</span><span class="lines">@@ -76,7 +69,7 @@
</span><span class="cx"> 
</span><span class="cx"> StackStats::CheckPoint::CheckPoint()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(*StackStats::s_sharedMutex);
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(StackStats::s_sharedMutex);
</ins><span class="cx">     WTFThreadData* threadData = const_cast&lt;WTFThreadData*&gt;(&amp;wtfThreadData());
</span><span class="cx">     StackStats::PerThreadStats&amp; t = threadData-&gt;stackStats();
</span><span class="cx">     const StackBounds&amp; stack = threadData-&gt;stack();
</span><span class="lines">@@ -134,7 +127,7 @@
</span><span class="cx"> 
</span><span class="cx"> StackStats::CheckPoint::~CheckPoint()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(*StackStats::s_sharedMutex);
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(StackStats::s_sharedMutex);
</ins><span class="cx">     WTFThreadData* threadData = const_cast&lt;WTFThreadData*&gt;(&amp;wtfThreadData());
</span><span class="cx">     StackStats::PerThreadStats&amp; t = threadData-&gt;stackStats();
</span><span class="cx"> 
</span><span class="lines">@@ -165,7 +158,7 @@
</span><span class="cx"> 
</span><span class="cx"> void StackStats::probe()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(*StackStats::s_sharedMutex);
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(StackStats::s_sharedMutex);
</ins><span class="cx">     WTFThreadData* threadData = const_cast&lt;WTFThreadData*&gt;(&amp;wtfThreadData());
</span><span class="cx">     StackStats::PerThreadStats&amp; t = threadData-&gt;stackStats();
</span><span class="cx">     const StackBounds&amp; stack = threadData-&gt;stack();
</span><span class="lines">@@ -226,7 +219,7 @@
</span><span class="cx">     // probe first, we can avoid re-entering the lock.
</span><span class="cx">     StackStats::probe();
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(*StackStats::s_sharedMutex);
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(StackStats::s_sharedMutex);
</ins><span class="cx">     WTFThreadData* threadData = const_cast&lt;WTFThreadData*&gt;(&amp;wtfThreadData());
</span><span class="cx">     StackStats::PerThreadStats&amp; t = threadData-&gt;stackStats();
</span><span class="cx">     const StackBounds&amp; stack = threadData-&gt;stack();
</span><span class="lines">@@ -295,7 +288,7 @@
</span><span class="cx"> 
</span><span class="cx"> StackStats::LayoutCheckPoint::~LayoutCheckPoint()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(*StackStats::s_sharedMutex);
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(StackStats::s_sharedMutex);
</ins><span class="cx"> 
</span><span class="cx">     // Pop to the previous layout checkpoint:
</span><span class="cx">     StackStats::s_topLayoutCheckPoint = m_prev;
</span></span></pre></div>
<a id="trunkSourceWTFwtfStackStatsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/StackStats.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/StackStats.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/StackStats.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExportMacros.h&quot;
</span><span class="cx"> #include &lt;mutex&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> // Define this flag to enable Stack stats collection. This feature is useful
</span><span class="lines">@@ -67,7 +68,6 @@
</span><span class="cx">         LayoutCheckPoint() { }
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    static void initialize() { }
</del><span class="cx">     static void probe() { }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -109,9 +109,6 @@
</span><span class="cx">         int m_depth;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    // Initializes locks and the log file. Should only be called once.
-    static void initialize();
-
</del><span class="cx">     // Used for probing the stack at places where we suspect to be high
</span><span class="cx">     // points of stack usage but are NOT check points where stack recursion
</span><span class="cx">     // is checked.
</span><span class="lines">@@ -124,7 +121,7 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     // CheckPoint management:
</span><del>-    static std::mutex* s_sharedMutex;
</del><ins>+    static StaticLock s_sharedMutex;
</ins><span class="cx">     static CheckPoint* s_topCheckPoint;
</span><span class="cx">     static LayoutCheckPoint* s_firstLayoutCheckPoint;
</span><span class="cx">     static LayoutCheckPoint* s_topLayoutCheckPoint;
</span></span></pre></div>
<a id="trunkSourceWTFwtfThreadingPthreadscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/ThreadingPthreads.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/ThreadingPthreads.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/ThreadingPthreads.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> #include &quot;dtoa/cached-powers.h&quot;
</span><span class="cx"> #include &quot;HashMap.h&quot;
</span><span class="cx"> #include &quot;RandomNumberSeed.h&quot;
</span><del>-#include &quot;StackStats.h&quot;
</del><span class="cx"> #include &quot;StdLibExtras.h&quot;
</span><span class="cx"> #include &quot;ThreadFunctionInvocation.h&quot;
</span><span class="cx"> #include &quot;ThreadIdentifierDataPthreads.h&quot;
</span><span class="lines">@@ -124,7 +123,6 @@
</span><span class="cx">     threadMapMutex();
</span><span class="cx">     initializeRandomNumberGenerator();
</span><span class="cx">     ThreadIdentifierData::initializeOnce();
</span><del>-    StackStats::initialize();
</del><span class="cx">     wtfThreadData();
</span><span class="cx">     initializeDates();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWTFwtfmacDeprecatedSymbolsUsedBySafarimm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/mac/DeprecatedSymbolsUsedBySafari.mm (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/mac/DeprecatedSymbolsUsedBySafari.mm        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/mac/DeprecatedSymbolsUsedBySafari.mm        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #include &quot;NeverDestroyed.h&quot;
</span><span class="cx"> #include &quot;StdLibExtras.h&quot;
</span><span class="cx"> #include &lt;mutex&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> // This file contains deprecated symbols that the last released version of Safari uses.
</span><span class="cx"> // Once Safari stops using them, we should remove them.
</span><span class="lines">@@ -45,25 +46,16 @@
</span><span class="cx">     callOnMainThread(std::function&lt;void ()&gt;(function));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static std::mutex&amp; atomicallyInitializedStaticMutex()
-{
-    static std::once_flag onceFlag;
-    static LazyNeverDestroyed&lt;std::mutex&gt; mutex;
-    std::call_once(onceFlag, []{
-        mutex.construct();
-    });
</del><ins>+static StaticLock atomicallyInitializedStaticMutex;
</ins><span class="cx"> 
</span><del>-    return mutex;
-}
-
</del><span class="cx"> void lockAtomicallyInitializedStaticMutex()
</span><span class="cx"> {
</span><del>-    atomicallyInitializedStaticMutex().lock();
</del><ins>+    atomicallyInitializedStaticMutex.lock();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void unlockAtomicallyInitializedStaticMutex()
</span><span class="cx"> {
</span><del>-    atomicallyInitializedStaticMutex().unlock();
</del><ins>+    atomicallyInitializedStaticMutex.unlock();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WTF
</span></span></pre></div>
<a id="trunkSourceWTFwtftextStringViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/StringView.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/StringView.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/text/StringView.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;mutex&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/unicode/UTF8.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -117,11 +118,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static std::mutex&amp; underlyingStringsMutex()
-{
-    static NeverDestroyed&lt;std::mutex&gt; mutex;
-    return mutex;
-}
</del><ins>+static StaticLock underlyingStringsMutex;
</ins><span class="cx"> 
</span><span class="cx"> static HashMap&lt;const StringImpl*, StringView::UnderlyingString*&gt;&amp; underlyingStrings()
</span><span class="cx"> {
</span><span class="lines">@@ -133,7 +130,7 @@
</span><span class="cx"> {
</span><span class="cx">     UnderlyingString* underlyingString;
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(underlyingStringsMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; lock(underlyingStringsMutex);
</ins><span class="cx">         underlyingString = underlyingStrings().take(&amp;stringToBeDestroyed);
</span><span class="cx">         if (!underlyingString)
</span><span class="cx">             return;
</span><span class="lines">@@ -152,7 +149,7 @@
</span><span class="cx">     if (m_underlyingString) {
</span><span class="cx">         if (!--m_underlyingString-&gt;refCount) {
</span><span class="cx">             if (m_underlyingString-&gt;isValid) {
</span><del>-                std::lock_guard&lt;std::mutex&gt; lock(underlyingStringsMutex());
</del><ins>+                std::lock_guard&lt;StaticLock&gt; lock(underlyingStringsMutex);
</ins><span class="cx">                 underlyingStrings().remove(&amp;m_underlyingString-&gt;string);
</span><span class="cx">             }
</span><span class="cx">             delete m_underlyingString;
</span><span class="lines">@@ -167,7 +164,7 @@
</span><span class="cx">     if (!string)
</span><span class="cx">         underlyingString = nullptr;
</span><span class="cx">     else {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(underlyingStringsMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; lock(underlyingStringsMutex);
</ins><span class="cx">         auto result = underlyingStrings().add(string, nullptr);
</span><span class="cx">         if (result.isNewEntry)
</span><span class="cx">             result.iterator-&gt;value = new UnderlyingString(*string);
</span></span></pre></div>
<a id="trunkSourceWTFwtfunicodeicuCollatorICUcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/unicode/icu/CollatorICU.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/unicode/icu/CollatorICU.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WTF/wtf/unicode/icu/CollatorICU.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;mutex&gt;
</span><span class="cx"> #include &lt;unicode/ucol.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/StringExtras.h&gt;
</span><span class="cx"> #include &lt;wtf/text/StringView.h&gt;
</span><span class="lines">@@ -50,18 +51,8 @@
</span><span class="cx"> static char* cachedCollatorLocale;
</span><span class="cx"> static bool cachedCollatorShouldSortLowercaseFirst;
</span><span class="cx"> 
</span><del>-static std::mutex&amp; cachedCollatorMutex()
-{
-    static std::once_flag onceFlag;
</del><ins>+static StaticLock cachedCollatorMutex;
</ins><span class="cx"> 
</span><del>-    static LazyNeverDestroyed&lt;std::mutex&gt; mutex;
-    std::call_once(onceFlag, []{
-        mutex.construct();
-    });
-
-    return mutex;
-}
-
</del><span class="cx"> #if !(OS(DARWIN) &amp;&amp; USE(CF))
</span><span class="cx"> 
</span><span class="cx"> static inline const char* resolveDefaultLocale(const char* locale)
</span><span class="lines">@@ -117,7 +108,7 @@
</span><span class="cx">     UErrorCode status = U_ZERO_ERROR;
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(cachedCollatorMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; lock(cachedCollatorMutex);
</ins><span class="cx">         if (cachedCollator &amp;&amp; localesMatch(cachedCollatorLocale, locale) &amp;&amp; cachedCollatorShouldSortLowercaseFirst == shouldSortLowercaseFirst) {
</span><span class="cx">             m_collator = cachedCollator;
</span><span class="cx">             m_locale = cachedCollatorLocale;
</span><span class="lines">@@ -147,7 +138,7 @@
</span><span class="cx"> 
</span><span class="cx"> Collator::~Collator()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(cachedCollatorMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(cachedCollatorMutex);
</ins><span class="cx">     if (cachedCollator) {
</span><span class="cx">         ucol_close(cachedCollator);
</span><span class="cx">         fastFree(cachedCollatorLocale);
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/ChangeLog        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,3 +1,142 @@
</span><ins>+2015-08-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
+        Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition
+        https://bugs.webkit.org/show_bug.cgi?id=148140
+
+        Reviewed by Geoffrey Garen.
+
+        No new tests because no new behavior.
+
+        * Modules/webaudio/AudioBufferSourceNode.cpp:
+        (WebCore::AudioBufferSourceNode::process):
+        (WebCore::AudioBufferSourceNode::setBuffer):
+        * Modules/webaudio/AudioBufferSourceNode.h:
+        * Modules/webaudio/AudioParamTimeline.cpp:
+        (WebCore::AudioParamTimeline::insertEvent):
+        (WebCore::AudioParamTimeline::cancelScheduledValues):
+        (WebCore::AudioParamTimeline::valueForContextTime):
+        (WebCore::AudioParamTimeline::valuesForTimeRange):
+        * Modules/webaudio/AudioParamTimeline.h:
+        * Modules/webaudio/ConvolverNode.cpp:
+        (WebCore::ConvolverNode::process):
+        (WebCore::ConvolverNode::reset):
+        (WebCore::ConvolverNode::setBuffer):
+        * Modules/webaudio/ConvolverNode.h:
+        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
+        (WebCore::MediaElementAudioSourceNode::process):
+        * Modules/webaudio/MediaElementAudioSourceNode.h:
+        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
+        (WebCore::MediaStreamAudioSourceNode::setFormat):
+        (WebCore::MediaStreamAudioSourceNode::process):
+        * Modules/webaudio/MediaStreamAudioSourceNode.h:
+        * Modules/webaudio/OscillatorNode.cpp:
+        (WebCore::OscillatorNode::process):
+        (WebCore::OscillatorNode::setPeriodicWave):
+        * Modules/webaudio/OscillatorNode.h:
+        * Modules/webaudio/PannerNode.cpp:
+        (WebCore::PannerNode::process):
+        (WebCore::PannerNode::setPanningModel):
+        * Modules/webaudio/PannerNode.h:
+        * Modules/webaudio/WaveShaperProcessor.cpp:
+        (WebCore::WaveShaperProcessor::setCurve):
+        (WebCore::WaveShaperProcessor::setOversample):
+        (WebCore::WaveShaperProcessor::process):
+        * Modules/webaudio/WaveShaperProcessor.h:
+        * Modules/webdatabase/Database.cpp:
+        (WebCore::retrieveTextResultFromDatabase):
+        (WebCore::guidToVersionMap):
+        (WebCore::Database::Database):
+        (WebCore::Database::performOpenAndVerify):
+        (WebCore::Database::closeDatabase):
+        (WebCore::Database::getCachedVersion):
+        (WebCore::Database::setCachedVersion):
+        (WebCore::guidMutex): Deleted.
+        * Modules/webdatabase/DatabaseManager.cpp:
+        (WebCore::DatabaseManager::existingDatabaseContextFor):
+        (WebCore::DatabaseManager::registerDatabaseContext):
+        (WebCore::DatabaseManager::unregisterDatabaseContext):
+        (WebCore::DatabaseManager::didConstructDatabaseContext):
+        (WebCore::DatabaseManager::didDestructDatabaseContext):
+        (WebCore::DatabaseManager::addProposedDatabase):
+        (WebCore::DatabaseManager::removeProposedDatabase):
+        (WebCore::DatabaseManager::fullPathForDatabase):
+        (WebCore::DatabaseManager::detailsForNameAndOrigin):
+        * Modules/webdatabase/DatabaseManager.h:
+        * bindings/objc/DOMInternal.mm:
+        (getDOMWrapper):
+        (addDOMWrapper):
+        (removeDOMWrapper):
+        (wrapperCacheLock): Deleted.
+        * crypto/CryptoAlgorithmRegistry.cpp:
+        (WebCore::CryptoAlgorithmRegistry::singleton):
+        (WebCore::CryptoAlgorithmRegistry::CryptoAlgorithmRegistry):
+        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
+        (WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
+        (WebCore::CryptoAlgorithmRegistry::create):
+        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
+        (WebCore::registryMutex): Deleted.
+        * inspector/WorkerDebuggerAgent.cpp:
+        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
+        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
+        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
+        * page/WheelEventTestTrigger.cpp:
+        (WebCore::WheelEventTestTrigger::clearAllTestDeferrals):
+        (WebCore::WheelEventTestTrigger::setTestCallbackAndStartNotificationTimer):
+        (WebCore::WheelEventTestTrigger::deferTestsForReason):
+        (WebCore::WheelEventTestTrigger::removeTestDeferralForReason):
+        (WebCore::WheelEventTestTrigger::triggerTestTimerFired):
+        * page/WheelEventTestTrigger.h:
+        * page/scrolling/ScrollingThread.cpp:
+        (WebCore::ScrollingThread::dispatch):
+        (WebCore::ScrollingThread::createThreadIfNeeded):
+        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
+        * page/scrolling/ScrollingThread.h:
+        * page/scrolling/mac/ScrollingThreadMac.mm:
+        (WebCore::ScrollingThread::initializeRunLoop):
+        * platform/audio/ReverbConvolver.cpp:
+        (WebCore::ReverbConvolver::~ReverbConvolver):
+        (WebCore::ReverbConvolver::backgroundThreadEntry):
+        (WebCore::ReverbConvolver::process):
+        (WebCore::ReverbConvolver::reset):
+        * platform/audio/ReverbConvolver.h:
+        * platform/ios/wak/WebCoreThreadRun.cpp:
+        * platform/mac/Language.mm:
+        (WebCore::preferredLanguages):
+        (+[WebLanguageChangeObserver languagePreferencesDidChange:]):
+        (WebCore::platformUserPreferredLanguages):
+        (WebCore::preferredLanguagesMutex): Deleted.
+        * platform/network/cf/LoaderRunLoopCF.cpp:
+        (WebCore::emptyPerform):
+        (WebCore::runLoaderThread):
+        (WebCore::loaderRunLoop):
+        (WebCore::loaderRunLoopMutex): Deleted.
+        (WebCore::loaderRunLoopConditionVariable): Deleted.
+        * platform/network/cf/SocketStreamHandleCFNet.cpp:
+        (WebCore::callOnMainThreadAndWait):
+        * platform/network/curl/SocketStreamHandle.h:
+        * platform/network/curl/SocketStreamHandleCurl.cpp:
+        (WebCore::SocketStreamHandle::platformSend):
+        (WebCore::SocketStreamHandle::sendData):
+        * platform/sql/SQLiteDatabaseTracker.cpp:
+        (WebCore::SQLiteDatabaseTracker::setClient):
+        (WebCore::SQLiteDatabaseTracker::incrementTransactionInProgressCount):
+        (WebCore::SQLiteDatabaseTracker::decrementTransactionInProgressCount):
+        (WebCore::SQLiteDatabaseTracker::transactionInProgressMutex): Deleted.
+        * platform/text/TextBreakIterator.cpp:
+        (WebCore::compareAndSwapNonSharedCharacterBreakIterator):
+        * platform/text/TextEncodingRegistry.cpp:
+        (WebCore::newTextCodec):
+        (WebCore::atomicCanonicalTextEncodingName):
+        (WebCore::dumpTextEncodingNameMap):
+        (WebCore::encodingRegistryMutex): Deleted.
+        * workers/WorkerThread.cpp:
+        (WebCore::workerThreads):
+        (WebCore::WorkerThread::workerThreadCount):
+        (WebCore::WorkerThread::WorkerThread):
+        (WebCore::WorkerThread::~WorkerThread):
+        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):
+        (WebCore::threadSetMutex): Deleted.
+
</ins><span class="cx"> 2015-08-18  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Scroll snapping should trigger when receiving a momentum end wheel event
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioBufferSourceNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // The audio thread can't block on this lock, so we use std::try_to_lock instead.
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_processMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_processMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock()) {
</span><span class="cx">         // Too bad - the try_lock() failed. We must be in the middle of changing buffers and were already outputting silence anyway.
</span><span class="cx">         outputBus-&gt;zero();
</span><span class="lines">@@ -416,7 +416,7 @@
</span><span class="cx">     AudioContext::AutoLocker contextLocker(*context());
</span><span class="cx">     
</span><span class="cx">     // This synchronizes with process().
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_processMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_processMutex);
</ins><span class="cx">     
</span><span class="cx">     if (buffer) {
</span><span class="cx">         // Do any necesssary re-configuration to the buffer's number of channels.
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioBufferSourceNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;PannerNode.h&quot;
</span><span class="cx"> #include &lt;memory&gt;
</span><del>-#include &lt;mutex&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -159,7 +159,7 @@
</span><span class="cx">     PannerNode* m_pannerNode;
</span><span class="cx"> 
</span><span class="cx">     // This synchronizes process() with setBuffer() which can cause dynamic channel count changes.
</span><del>-    mutable std::mutex m_processMutex;
</del><ins>+    mutable Lock m_processMutex;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioParamTimelinecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">     if (!isValid)
</span><span class="cx">         return;
</span><span class="cx">         
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_eventsMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_eventsMutex);
</ins><span class="cx">     
</span><span class="cx">     unsigned i = 0;
</span><span class="cx">     float insertTime = event.time();
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx"> 
</span><span class="cx"> void AudioParamTimeline::cancelScheduledValues(float startTime)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_eventsMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_eventsMutex);
</ins><span class="cx"> 
</span><span class="cx">     // Remove all events starting at startTime.
</span><span class="cx">     for (unsigned i = 0; i &lt; m_events.size(); ++i) {
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">     ASSERT(context);
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::unique_lock&lt;std::mutex&gt; lock(m_eventsMutex, std::try_to_lock);
</del><ins>+        std::unique_lock&lt;Lock&gt; lock(m_eventsMutex, std::try_to_lock);
</ins><span class="cx">         if (!lock.owns_lock() || !context || !m_events.size() || context-&gt;currentTime() &lt; m_events[0].time()) {
</span><span class="cx">             hasValue = false;
</span><span class="cx">             return defaultValue;
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx"> float AudioParamTimeline::valuesForTimeRange(double startTime, double endTime, float defaultValue, float* values, unsigned numberOfValues, double sampleRate, double controlRate)
</span><span class="cx"> {
</span><span class="cx">     // We can't contend the lock in the realtime audio thread.
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_eventsMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_eventsMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock()) {
</span><span class="cx">         if (values) {
</span><span class="cx">             for (unsigned i = 0; i &lt; numberOfValues; ++i)
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioParamTimelineh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -30,8 +30,8 @@
</span><span class="cx"> #define AudioParamTimeline_h
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AudioContext.h&quot;
</span><del>-#include &lt;mutex&gt;
</del><span class="cx"> #include &lt;runtime/Float32Array.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/Vector.h&gt;
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;ParamEvent&gt; m_events;
</span><span class="cx"> 
</span><del>-    std::mutex m_eventsMutex;
</del><ins>+    Lock m_eventsMutex;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioConvolverNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/ConvolverNode.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/ConvolverNode.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/ConvolverNode.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx">     ASSERT(outputBus);
</span><span class="cx"> 
</span><span class="cx">     // Synchronize with possible dynamic changes to the impulse response.
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_processMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_processMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock()) {
</span><span class="cx">         // Too bad - the try_lock() failed. We must be in the middle of setting a new impulse response.
</span><span class="cx">         outputBus-&gt;zero();
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ConvolverNode::reset()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_processMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_processMutex);
</ins><span class="cx">     if (m_reverb)
</span><span class="cx">         m_reverb-&gt;reset();
</span><span class="cx"> }
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx"> 
</span><span class="cx">     {
</span><span class="cx">         // Synchronize with process().
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_processMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_processMutex);
</ins><span class="cx">         m_reverb = WTF::move(reverb);
</span><span class="cx">         m_buffer = buffer;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioConvolverNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/ConvolverNode.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/ConvolverNode.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/ConvolverNode.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AudioNode.h&quot;
</span><span class="cx"> #include &lt;memory&gt;
</span><del>-#include &lt;mutex&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx">     RefPtr&lt;AudioBuffer&gt; m_buffer;
</span><span class="cx"> 
</span><span class="cx">     // This synchronizes dynamic changes to the convolution impulse response with process().
</span><del>-    mutable std::mutex m_processMutex;
</del><ins>+    mutable Lock m_processMutex;
</ins><span class="cx"> 
</span><span class="cx">     // Normalize the impulse response or not. Must default to true.
</span><span class="cx">     bool m_normalize;
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioMediaElementAudioSourceNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx">     // Use a std::try_to_lock to avoid contention in the real-time audio thread.
</span><span class="cx">     // If we fail to acquire the lock then the HTMLMediaElement must be in the middle of
</span><span class="cx">     // reconfiguring its playback engine, so we output silence in this case.
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_processMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_processMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock()) {
</span><span class="cx">         // We failed to acquire the lock.
</span><span class="cx">         outputBus-&gt;zero();
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioMediaElementAudioSourceNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> #include &quot;HTMLMediaElement.h&quot;
</span><span class="cx"> #include &quot;MultiChannelResampler.h&quot;
</span><span class="cx"> #include &lt;memory&gt;
</span><del>-#include &lt;mutex&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx">     virtual bool propagatesSilence() const override { return false; }
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;HTMLMediaElement&gt; m_mediaElement;
</span><del>-    std::mutex m_processMutex;
</del><ins>+    Lock m_processMutex;
</ins><span class="cx"> 
</span><span class="cx">     unsigned m_sourceNumberOfChannels;
</span><span class="cx">     double m_sourceSampleRate;
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioMediaStreamAudioSourceNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Synchronize with process().
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_processMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_processMutex);
</ins><span class="cx"> 
</span><span class="cx">         m_sourceNumberOfChannels = numberOfChannels;
</span><span class="cx"> 
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx">     // Use std::try_to_lock to avoid contention in the real-time audio thread.
</span><span class="cx">     // If we fail to acquire the lock then the MediaStream must be in the middle of
</span><span class="cx">     // a format change, so we output silence in this case.
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_processMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_processMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock()) {
</span><span class="cx">         // We failed to acquire the lock.
</span><span class="cx">         outputBus-&gt;zero();
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioMediaStreamAudioSourceNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> #include &quot;AudioSourceProvider.h&quot;
</span><span class="cx"> #include &quot;AudioSourceProviderClient.h&quot;
</span><span class="cx"> #include &quot;MediaStream.h&quot;
</span><del>-#include &lt;mutex&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">     RefPtr&lt;MediaStreamTrack&gt; m_audioTrack;
</span><span class="cx">     AudioSourceProvider* m_audioSourceProvider;
</span><span class="cx"> 
</span><del>-    std::mutex m_processMutex;
</del><ins>+    Lock m_processMutex;
</ins><span class="cx"> 
</span><span class="cx">     unsigned m_sourceNumberOfChannels;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioOscillatorNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -231,7 +231,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     // The audio thread can't block on this lock, so we use std::try_to_lock instead.
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_processMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_processMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock()) {
</span><span class="cx">         // Too bad - the try_lock() failed. We must be in the middle of changing wave-tables.
</span><span class="cx">         outputBus-&gt;zero();
</span><span class="lines">@@ -340,7 +340,7 @@
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx"> 
</span><span class="cx">     // This synchronizes with process().
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_processMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_processMutex);
</ins><span class="cx">     m_periodicWave = periodicWave;
</span><span class="cx">     m_type = CUSTOM;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioOscillatorNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx"> #include &quot;AudioBus.h&quot;
</span><span class="cx"> #include &quot;AudioParam.h&quot;
</span><span class="cx"> #include &quot;AudioScheduledSourceNode.h&quot;
</span><del>-#include &lt;mutex&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx">     double m_virtualReadIndex;
</span><span class="cx"> 
</span><span class="cx">     // This synchronizes process().
</span><del>-    mutable std::mutex m_processMutex;
</del><ins>+    mutable Lock m_processMutex;
</ins><span class="cx"> 
</span><span class="cx">     // Stores sample-accurate values calculated according to frequency and detune.
</span><span class="cx">     AudioFloatArray m_phaseIncrements;
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioPannerNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -120,7 +120,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // The audio thread can't block on this lock, so we use std::try_to_lock instead.
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_pannerMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_pannerMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock()) {
</span><span class="cx">         // Too bad - The try_lock() failed. We must be in the middle of changing the panner.
</span><span class="cx">         destination-&gt;zero();
</span><span class="lines">@@ -209,7 +209,7 @@
</span><span class="cx">     case HRTF:
</span><span class="cx">         if (!m_panner.get() || model != m_panningModel) {
</span><span class="cx">             // This synchronizes with process().
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(m_pannerMutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(m_pannerMutex);
</ins><span class="cx"> 
</span><span class="cx">             m_panner = Panner::create(model, sampleRate(), m_hrtfDatabaseLoader.get());
</span><span class="cx">             m_panningModel = model;
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioPannerNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/PannerNode.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/PannerNode.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/PannerNode.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx"> #include &quot;HRTFDatabaseLoader.h&quot;
</span><span class="cx"> #include &quot;Panner.h&quot;
</span><span class="cx"> #include &lt;memory&gt;
</span><del>-#include &lt;mutex&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">@@ -161,7 +161,7 @@
</span><span class="cx">     unsigned m_connectionCount;
</span><span class="cx"> 
</span><span class="cx">     // Synchronize process() and setPanningModel() which can change the panner.
</span><del>-    mutable std::mutex m_pannerMutex;
</del><ins>+    mutable Lock m_pannerMutex;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioWaveShaperProcessorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> void WaveShaperProcessor::setCurve(Float32Array* curve)
</span><span class="cx"> {
</span><span class="cx">     // This synchronizes with process().
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_processMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_processMutex);
</ins><span class="cx"> 
</span><span class="cx">     m_curve = curve;
</span><span class="cx"> }
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> void WaveShaperProcessor::setOversample(OverSampleType oversample)
</span><span class="cx"> {
</span><span class="cx">     // This synchronizes with process().
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_processMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_processMutex);
</ins><span class="cx"> 
</span><span class="cx">     m_oversample = oversample;
</span><span class="cx"> 
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     // The audio thread can't block on this lock, so we use std::try_to_lock instead.
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_processMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_processMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock()) {
</span><span class="cx">         // Too bad - the try_lock() failed. We must be in the middle of a setCurve() call.
</span><span class="cx">         destination-&gt;zero();
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioWaveShaperProcessorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/WaveShaperProcessor.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/WaveShaperProcessor.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webaudio/WaveShaperProcessor.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -29,8 +29,8 @@
</span><span class="cx"> #include &quot;AudioDSPKernelProcessor.h&quot;
</span><span class="cx"> #include &quot;AudioNode.h&quot;
</span><span class="cx"> #include &lt;memory&gt;
</span><del>-#include &lt;mutex&gt;
</del><span class="cx"> #include &lt;runtime/Float32Array.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">     OverSampleType m_oversample;
</span><span class="cx"> 
</span><span class="cx">     // This synchronizes process() with setCurve().
</span><del>-    mutable std::mutex m_processMutex;
</del><ins>+    mutable Lock m_processMutex;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/Database.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/Database.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -157,18 +157,8 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // FIXME: move all guid-related functions to a DatabaseVersionTracker class.
</span><del>-static std::mutex&amp; guidMutex()
-{
-    static std::once_flag onceFlag;
-    static LazyNeverDestroyed&lt;std::mutex&gt; mutex;
</del><ins>+static StaticLock guidMutex;
</ins><span class="cx"> 
</span><del>-    std::call_once(onceFlag, [] {
-        mutex.construct();
-    });
-
-    return mutex;
-}
-
</del><span class="cx"> typedef HashMap&lt;DatabaseGuid, String&gt; GuidVersionMap;
</span><span class="cx"> static GuidVersionMap&amp; guidToVersionMap()
</span><span class="cx"> {
</span><span class="lines">@@ -233,7 +223,7 @@
</span><span class="cx">         m_name = emptyString();
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; locker(guidMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; locker(guidMutex);
</ins><span class="cx"> 
</span><span class="cx">         m_guid = guidForOriginAndName(securityOrigin()-&gt;toString(), name);
</span><span class="cx">         std::unique_ptr&lt;HashSet&lt;Database*&gt;&gt;&amp; hashSet = guidToDatabaseMap().add(m_guid, nullptr).iterator-&gt;value;
</span><span class="lines">@@ -370,7 +360,7 @@
</span><span class="cx"> 
</span><span class="cx">     String currentVersion;
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; locker(guidMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; locker(guidMutex);
</ins><span class="cx"> 
</span><span class="cx">         auto entry = guidToVersionMap().find(m_guid);
</span><span class="cx">         if (entry != guidToVersionMap().end()) {
</span><span class="lines">@@ -465,7 +455,7 @@
</span><span class="cx">     // See comment at the top this file regarding calling removeOpenDatabase().
</span><span class="cx">     DatabaseTracker::tracker().removeOpenDatabase(this);
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; locker(guidMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; locker(guidMutex);
</ins><span class="cx"> 
</span><span class="cx">         auto it = guidToDatabaseMap().find(m_guid);
</span><span class="cx">         ASSERT(it != guidToDatabaseMap().end());
</span><span class="lines">@@ -524,7 +514,7 @@
</span><span class="cx"> 
</span><span class="cx"> String Database::getCachedVersion() const
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; locker(guidMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; locker(guidMutex);
</ins><span class="cx"> 
</span><span class="cx">     return guidToVersionMap().get(m_guid).isolatedCopy();
</span><span class="cx"> }
</span><span class="lines">@@ -532,7 +522,7 @@
</span><span class="cx"> void Database::setCachedVersion(const String&amp; actualVersion)
</span><span class="cx"> {
</span><span class="cx">     // Update the in memory database version map.
</span><del>-    std::lock_guard&lt;std::mutex&gt; locker(guidMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; locker(guidMutex);
</ins><span class="cx"> 
</span><span class="cx">     updateGuidVersionMap(m_guid, actualVersion);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;DatabaseContext&gt; DatabaseManager::existingDatabaseContextFor(ScriptExecutionContext* context)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(m_databaseContextRegisteredCount &gt;= 0);
</span><span class="cx">     ASSERT(m_databaseContextInstanceCount &gt;= 0);
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx"> 
</span><span class="cx"> void DatabaseManager::registerDatabaseContext(DatabaseContext* databaseContext)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     ScriptExecutionContext* context = databaseContext-&gt;scriptExecutionContext();
</span><span class="cx">     m_contextMap.set(context, databaseContext);
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx"> 
</span><span class="cx"> void DatabaseManager::unregisterDatabaseContext(DatabaseContext* databaseContext)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     ScriptExecutionContext* context = databaseContext-&gt;scriptExecutionContext();
</span><span class="cx">     ASSERT(m_contextMap.get(context));
</span><span class="lines">@@ -162,14 +162,14 @@
</span><span class="cx"> #if !ASSERT_DISABLED
</span><span class="cx"> void DatabaseManager::didConstructDatabaseContext()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     m_databaseContextInstanceCount++;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void DatabaseManager::didDestructDatabaseContext()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     m_databaseContextInstanceCount--;
</span><span class="cx">     ASSERT(m_databaseContextRegisteredCount &lt;= m_databaseContextInstanceCount);
</span><span class="lines">@@ -258,14 +258,14 @@
</span><span class="cx"> 
</span><span class="cx"> void DatabaseManager::addProposedDatabase(ProposedDatabase* proposedDb)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     m_proposedDatabases.add(proposedDb);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void DatabaseManager::removeProposedDatabase(ProposedDatabase* proposedDb)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     m_proposedDatabases.remove(proposedDb);
</span><span class="cx"> }
</span><span class="lines">@@ -320,7 +320,7 @@
</span><span class="cx"> String DatabaseManager::fullPathForDatabase(SecurityOrigin* origin, const String&amp; name, bool createIfDoesNotExist)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">         for (auto* proposedDatabase : m_proposedDatabases) {
</span><span class="cx">             if (proposedDatabase-&gt;details().name() == name &amp;&amp; proposedDatabase-&gt;origin()-&gt;equal(origin))
</span><span class="lines">@@ -349,7 +349,7 @@
</span><span class="cx"> DatabaseDetails DatabaseManager::detailsForNameAndOrigin(const String&amp; name, SecurityOrigin* origin)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         
</span><span class="cx">         for (auto* proposedDatabase : m_proposedDatabases) {
</span><span class="cx">             if (proposedDatabase-&gt;details().name() == name &amp;&amp; proposedDatabase-&gt;origin()-&gt;equal(origin)) {
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -29,10 +29,10 @@
</span><span class="cx"> #include &quot;DatabaseBasicTypes.h&quot;
</span><span class="cx"> #include &quot;DatabaseDetails.h&quot;
</span><span class="cx"> #include &quot;DatabaseError.h&quot;
</span><del>-#include &lt;mutex&gt;
</del><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.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/PassRefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx">     HashSet&lt;ProposedDatabase*&gt; m_proposedDatabases;
</span><span class="cx"> 
</span><span class="cx">     // This mutex protects m_contextMap, and m_proposedDatabases.
</span><del>-    std::mutex m_mutex;
</del><ins>+    Lock m_mutex;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsobjcDOMInternalmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/objc/DOMInternal.mm (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/objc/DOMInternal.mm        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/bindings/objc/DOMInternal.mm        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #import &quot;ScriptController.h&quot;
</span><span class="cx"> #import &quot;WebScriptObjectPrivate.h&quot;
</span><span class="cx"> #import &quot;runtime_root.h&quot;
</span><ins>+#import &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #import &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #import &lt;wtf/spi/cocoa/NSMapTableSPI.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -46,16 +47,7 @@
</span><span class="cx"> static NSMapTable* DOMWrapperCache;
</span><span class="cx">     
</span><span class="cx"> #ifdef NEEDS_WRAPPER_CACHE_LOCK
</span><del>-static std::mutex&amp; wrapperCacheLock()
-{
-    static std::once_flag onceFlag;
-    static LazyNeverDestroyed&lt;std::mutex&gt; mutex;
-
-    std::call_once(onceFlag, [] {
-        mutex.construct();
-    });
-    return mutex;
-}
</del><ins>+static StaticLock wrapperCacheLock;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if COMPILER(CLANG)
</span><span class="lines">@@ -78,7 +70,7 @@
</span><span class="cx"> NSObject* getDOMWrapper(DOMObjectInternal* impl)
</span><span class="cx"> {
</span><span class="cx"> #ifdef NEEDS_WRAPPER_CACHE_LOCK
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(wrapperCacheLock());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(wrapperCacheLock);
</ins><span class="cx"> #endif
</span><span class="cx">     if (!DOMWrapperCache)
</span><span class="cx">         return nil;
</span><span class="lines">@@ -88,7 +80,7 @@
</span><span class="cx"> void addDOMWrapper(NSObject* wrapper, DOMObjectInternal* impl)
</span><span class="cx"> {
</span><span class="cx"> #ifdef NEEDS_WRAPPER_CACHE_LOCK
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(wrapperCacheLock());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(wrapperCacheLock);
</ins><span class="cx"> #endif
</span><span class="cx">     if (!DOMWrapperCache)
</span><span class="cx">         DOMWrapperCache = createWrapperCache();
</span><span class="lines">@@ -98,7 +90,7 @@
</span><span class="cx"> void removeDOMWrapper(DOMObjectInternal* impl)
</span><span class="cx"> {
</span><span class="cx"> #ifdef NEEDS_WRAPPER_CACHE_LOCK
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(wrapperCacheLock());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(wrapperCacheLock);
</ins><span class="cx"> #endif
</span><span class="cx">     if (!DOMWrapperCache)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCorecryptoCryptoAlgorithmRegistrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/crypto/CryptoAlgorithmRegistry.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/crypto/CryptoAlgorithmRegistry.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/crypto/CryptoAlgorithmRegistry.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> #if ENABLE(SUBTLE_CRYPTO)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CryptoAlgorithm.h&quot;
</span><del>-#include &lt;mutex&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -41,18 +41,8 @@
</span><span class="cx">     return registry;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static std::mutex&amp; registryMutex()
-{
-    static std::once_flag onceFlag;
-    static LazyNeverDestroyed&lt;std::mutex&gt; mutex;
</del><ins>+static StaticLock registryMutex;
</ins><span class="cx"> 
</span><del>-    std::call_once(onceFlag, []{
-        mutex.construct();
-    });
-
-    return mutex;
-}
-
</del><span class="cx"> CryptoAlgorithmRegistry::CryptoAlgorithmRegistry()
</span><span class="cx"> {
</span><span class="cx">     platformRegisterAlgorithms();
</span><span class="lines">@@ -63,7 +53,7 @@
</span><span class="cx">     if (name.isEmpty())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(registryMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(registryMutex);
</ins><span class="cx"> 
</span><span class="cx">     auto iter = m_nameToIdentifierMap.find(name.isolatedCopy());
</span><span class="cx">     if (iter == m_nameToIdentifierMap.end())
</span><span class="lines">@@ -75,14 +65,14 @@
</span><span class="cx"> 
</span><span class="cx"> String CryptoAlgorithmRegistry::nameForIdentifier(CryptoAlgorithmIdentifier identifier)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(registryMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(registryMutex);
</ins><span class="cx"> 
</span><span class="cx">     return m_identifierToNameMap.get(static_cast&lt;unsigned&gt;(identifier)).isolatedCopy();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr&lt;CryptoAlgorithm&gt; CryptoAlgorithmRegistry::create(CryptoAlgorithmIdentifier identifier)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(registryMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(registryMutex);
</ins><span class="cx"> 
</span><span class="cx">     auto iter = m_identifierToConstructorMap.find(static_cast&lt;unsigned&gt;(identifier));
</span><span class="cx">     if (iter == m_identifierToConstructorMap.end())
</span><span class="lines">@@ -93,7 +83,7 @@
</span><span class="cx"> 
</span><span class="cx"> void CryptoAlgorithmRegistry::registerAlgorithm(const String&amp; name, CryptoAlgorithmIdentifier identifier, CryptoAlgorithmConstructor constructor)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(registryMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(registryMutex);
</ins><span class="cx"> 
</span><span class="cx">     bool added = m_nameToIdentifierMap.add(name, identifier).isNewEntry;
</span><span class="cx">     ASSERT_UNUSED(added, added);
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorWorkerDebuggerAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/WorkerDebuggerAgent.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/WorkerDebuggerAgent.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/inspector/WorkerDebuggerAgent.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> #include &lt;inspector/InjectedScript.h&gt;
</span><span class="cx"> #include &lt;inspector/InjectedScriptManager.h&gt;
</span><span class="cx"> #include &lt;inspector/ScriptDebugServer.h&gt;
</span><del>-#include &lt;mutex&gt;
</del><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/MessageQueue.h&gt;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -46,18 +46,8 @@
</span><span class="cx"> 
</span><span class="cx"> namespace {
</span><span class="cx"> 
</span><del>-std::mutex&amp; workerDebuggerAgentsMutex()
-{
-    static std::once_flag onceFlag;
-    static LazyNeverDestroyed&lt;std::mutex&gt; mutex;
</del><ins>+StaticLock workerDebuggerAgentsMutex;
</ins><span class="cx"> 
</span><del>-    std::call_once(onceFlag, []{
-        mutex.construct();
-    });
-
-    return mutex;
-}
-
</del><span class="cx"> typedef HashMap&lt;WorkerThread*, WorkerDebuggerAgent*&gt; WorkerDebuggerAgents;
</span><span class="cx"> 
</span><span class="cx"> WorkerDebuggerAgents&amp; workerDebuggerAgents()
</span><span class="lines">@@ -95,13 +85,13 @@
</span><span class="cx">     , m_scriptDebugServer(inspectedWorkerGlobalScope, WorkerDebuggerAgent::debuggerTaskMode)
</span><span class="cx">     , m_inspectedWorkerGlobalScope(inspectedWorkerGlobalScope)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(workerDebuggerAgentsMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(workerDebuggerAgentsMutex);
</ins><span class="cx">     workerDebuggerAgents().set(&amp;inspectedWorkerGlobalScope-&gt;thread(), this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WorkerDebuggerAgent::~WorkerDebuggerAgent()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(workerDebuggerAgentsMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(workerDebuggerAgentsMutex);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(workerDebuggerAgents().contains(&amp;m_inspectedWorkerGlobalScope-&gt;thread()));
</span><span class="cx">     workerDebuggerAgents().remove(&amp;m_inspectedWorkerGlobalScope-&gt;thread());
</span><span class="lines">@@ -109,7 +99,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerDebuggerAgent::interruptAndDispatchInspectorCommands(WorkerThread* thread)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(workerDebuggerAgentsMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(workerDebuggerAgentsMutex);
</ins><span class="cx"> 
</span><span class="cx">     if (WorkerDebuggerAgent* agent = workerDebuggerAgents().get(thread))
</span><span class="cx">         agent-&gt;m_scriptDebugServer.interruptAndRunTask(std::make_unique&lt;RunInspectorCommandsTask&gt;(thread, agent-&gt;m_inspectedWorkerGlobalScope));
</span></span></pre></div>
<a id="trunkSourceWebCorepageWheelEventTestTriggercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/WheelEventTestTrigger.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/WheelEventTestTrigger.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/page/WheelEventTestTrigger.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WheelEventTestTrigger::clearAllTestDeferrals()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_testTriggerMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_testTriggerMutex);
</ins><span class="cx">     m_deferTestTriggerReasons.clear();
</span><span class="cx">     m_testNotificationCallback = std::function&lt;void()&gt;();
</span><span class="cx">     m_testTriggerTimer.stop();
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx"> void WheelEventTestTrigger::setTestCallbackAndStartNotificationTimer(std::function&lt;void()&gt; functionCallback)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_testTriggerMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_testTriggerMutex);
</ins><span class="cx">         m_testNotificationCallback = WTF::move(functionCallback);
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WheelEventTestTrigger::deferTestsForReason(ScrollableAreaIdentifier identifier, DeferTestTriggerReason reason)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_testTriggerMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_testTriggerMutex);
</ins><span class="cx">     auto it = m_deferTestTriggerReasons.find(identifier);
</span><span class="cx">     if (it == m_deferTestTriggerReasons.end())
</span><span class="cx">         it = m_deferTestTriggerReasons.add(identifier, std::set&lt;DeferTestTriggerReason&gt;()).iterator;
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WheelEventTestTrigger::removeTestDeferralForReason(ScrollableAreaIdentifier identifier, DeferTestTriggerReason reason)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_testTriggerMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_testTriggerMutex);
</ins><span class="cx">     auto it = m_deferTestTriggerReasons.find(identifier);
</span><span class="cx">     if (it == m_deferTestTriggerReasons.end())
</span><span class="cx">         return;
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx">     std::function&lt;void()&gt; functionCallback;
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_testTriggerMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_testTriggerMutex);
</ins><span class="cx">         if (!m_deferTestTriggerReasons.isEmpty()) {
</span><span class="cx"> #if !LOG_DISABLED
</span><span class="cx">             if (isLogChannelEnabled(&quot;WheelEventTestTriggers&quot;))
</span></span></pre></div>
<a id="trunkSourceWebCorepageWheelEventTestTriggerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/WheelEventTestTrigger.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/WheelEventTestTrigger.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/page/WheelEventTestTrigger.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -29,9 +29,9 @@
</span><span class="cx"> #ifndef WheelEventTestTrigger_h
</span><span class="cx"> #define WheelEventTestTrigger_h
</span><span class="cx"> 
</span><del>-#include &lt;mutex&gt;
</del><span class="cx"> #include &lt;set&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/RefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/RunLoop.h&gt;
</span><span class="cx"> #include &lt;wtf/ThreadSafeRefCounted.h&gt;
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> private:
</span><span class="cx">     std::function&lt;void()&gt; m_testNotificationCallback;
</span><span class="cx">     RunLoop::Timer&lt;WheelEventTestTrigger&gt; m_testTriggerTimer;
</span><del>-    mutable std::mutex m_testTriggerMutex;
</del><ins>+    mutable Lock m_testTriggerMutex;
</ins><span class="cx">     WTF::HashMap&lt;ScrollableAreaIdentifier, std::set&lt;DeferTestTriggerReason&gt;&gt; m_deferTestTriggerReasons;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingThread.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingThread.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/page/scrolling/ScrollingThread.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2012 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2012, 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">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><span class="cx"> 
</span><ins>+#include &lt;mutex&gt;
</ins><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -50,7 +51,7 @@
</span><span class="cx">     scrollingThread.createThreadIfNeeded();
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(singleton().m_functionsMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(singleton().m_functionsMutex);
</ins><span class="cx">         scrollingThread.m_functions.append(function);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -78,7 +79,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Wait for the thread to initialize the run loop.
</span><span class="cx">     {
</span><del>-        std::unique_lock&lt;std::mutex&gt; lock(m_initializeRunLoopMutex);
</del><ins>+        std::unique_lock&lt;Lock&gt; lock(m_initializeRunLoopMutex);
</ins><span class="cx"> 
</span><span class="cx">         m_threadIdentifier = createThread(threadCallback, this, &quot;WebCore: Scrolling&quot;);
</span><span class="cx">         
</span><span class="lines">@@ -106,7 +107,7 @@
</span><span class="cx">     Vector&lt;std::function&lt;void ()&gt;&gt; functions;
</span><span class="cx">     
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_functionsMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_functionsMutex);
</ins><span class="cx">         functions = WTF::move(m_functions);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingThreadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingThread.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingThread.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/page/scrolling/ScrollingThread.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2012 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2012, 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">@@ -28,9 +28,10 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><span class="cx"> 
</span><del>-#include &lt;condition_variable&gt;
</del><span class="cx"> #include &lt;functional&gt;
</span><ins>+#include &lt;wtf/Condition.h&gt;
</ins><span class="cx"> #include &lt;wtf/Forward.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"> #include &lt;wtf/Vector.h&gt;
</span><span class="lines">@@ -74,10 +75,10 @@
</span><span class="cx"> 
</span><span class="cx">     ThreadIdentifier m_threadIdentifier;
</span><span class="cx"> 
</span><del>-    std::condition_variable m_initializeRunLoopConditionVariable;
-    std::mutex m_initializeRunLoopMutex;
</del><ins>+    Condition m_initializeRunLoopConditionVariable;
+    Lock m_initializeRunLoopMutex;
</ins><span class="cx"> 
</span><del>-    std::mutex m_functionsMutex;
</del><ins>+    Lock m_functionsMutex;
</ins><span class="cx">     Vector&lt;std::function&lt;void ()&gt;&gt; m_functions;
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingThreadMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingThreadMac.mm (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingThreadMac.mm        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingThreadMac.mm        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -28,13 +28,15 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><span class="cx"> 
</span><ins>+#include &lt;mutex&gt;
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> void ScrollingThread::initializeRunLoop()
</span><span class="cx"> {
</span><span class="cx">     // Initialize the run loop.
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_initializeRunLoopMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_initializeRunLoopMutex);
</ins><span class="cx"> 
</span><span class="cx">         m_threadRunLoop = CFRunLoopGetCurrent();
</span><span class="cx"> 
</span><span class="lines">@@ -42,7 +44,7 @@
</span><span class="cx">         m_threadRunLoopSource = adoptCF(CFRunLoopSourceCreate(0, 0, &amp;context));
</span><span class="cx">         CFRunLoopAddSource(CFRunLoopGetCurrent(), m_threadRunLoopSource.get(), kCFRunLoopDefaultMode);
</span><span class="cx"> 
</span><del>-        m_initializeRunLoopConditionVariable.notify_all();
</del><ins>+        m_initializeRunLoopConditionVariable.notifyAll();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT(isCurrentThread());
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformaudioReverbConvolvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/audio/ReverbConvolver.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/audio/ReverbConvolver.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/audio/ReverbConvolver.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;VectorMath.h&quot;
</span><span class="cx"> #include &quot;AudioBus.h&quot;
</span><ins>+#include &lt;mutex&gt;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -140,9 +141,9 @@
</span><span class="cx"> 
</span><span class="cx">         // Wake up thread so it can return
</span><span class="cx">         {
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(m_backgroundThreadMutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(m_backgroundThreadMutex);
</ins><span class="cx">             m_moreInputBuffered = true;
</span><del>-            m_backgroundThreadConditionVariable.notify_one();
</del><ins>+            m_backgroundThreadConditionVariable.notifyOne();
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         waitForThreadCompletion(m_backgroundThread);
</span><span class="lines">@@ -155,7 +156,7 @@
</span><span class="cx">         // Wait for realtime thread to give us more input
</span><span class="cx">         m_moreInputBuffered = false;        
</span><span class="cx">         {
</span><del>-            std::unique_lock&lt;std::mutex&gt; lock(m_backgroundThreadMutex);
</del><ins>+            std::unique_lock&lt;Lock&gt; lock(m_backgroundThreadMutex);
</ins><span class="cx"> 
</span><span class="cx">             m_backgroundThreadConditionVariable.wait(lock, [this] { return m_moreInputBuffered || m_wantsToExit; });
</span><span class="cx">         }
</span><span class="lines">@@ -209,12 +210,12 @@
</span><span class="cx">     // signal from time to time, since we'll get to it the next time we're called.  We're called repeatedly
</span><span class="cx">     // and frequently (around every 3ms).  The background thread is processing well into the future and has a considerable amount of 
</span><span class="cx">     // leeway here...
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(m_backgroundThreadMutex, std::try_to_lock);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(m_backgroundThreadMutex, std::try_to_lock);
</ins><span class="cx">     if (!lock.owns_lock())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     m_moreInputBuffered = true;
</span><del>-    m_backgroundThreadConditionVariable.notify_one();
</del><ins>+    m_backgroundThreadConditionVariable.notifyOne();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ReverbConvolver::reset()
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformaudioReverbConvolverh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/audio/ReverbConvolver.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/audio/ReverbConvolver.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/audio/ReverbConvolver.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,5 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2010 Google Inc. All rights reserved.
</span><ins>+ * Copyright (C) 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">@@ -35,9 +36,9 @@
</span><span class="cx"> #include &quot;ReverbAccumulationBuffer.h&quot;
</span><span class="cx"> #include &quot;ReverbConvolverStage.h&quot;
</span><span class="cx"> #include &quot;ReverbInputBuffer.h&quot;
</span><del>-#include &lt;condition_variable&gt;
</del><span class="cx"> #include &lt;memory&gt;
</span><del>-#include &lt;mutex&gt;
</del><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"> #include &lt;wtf/Vector.h&gt;
</span><span class="lines">@@ -88,8 +89,8 @@
</span><span class="cx">     ThreadIdentifier m_backgroundThread;
</span><span class="cx">     bool m_wantsToExit;
</span><span class="cx">     bool m_moreInputBuffered;
</span><del>-    mutable std::mutex m_backgroundThreadMutex;
-    mutable std::condition_variable m_backgroundThreadConditionVariable;
</del><ins>+    mutable Lock m_backgroundThreadMutex;
+    mutable Condition m_backgroundThreadConditionVariable;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformioswakWebCoreThreadRuncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/wak/WebCoreThreadRun.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/wak/WebCoreThreadRun.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/ios/wak/WebCoreThreadRun.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2010 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2010, 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,7 +30,9 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;WebCoreThread.h&quot;
</span><span class="cx"> #include &quot;WebCoreThreadInternal.h&quot;
</span><del>-#include &lt;condition_variable&gt;
</del><ins>+#include &lt;mutex&gt;
+#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"> 
</span><span class="cx"> namespace {
</span><span class="lines">@@ -44,23 +46,23 @@
</span><span class="cx"> 
</span><span class="cx">     void waitForCompletion()
</span><span class="cx">     {
</span><del>-        std::unique_lock&lt;std::mutex&gt; lock(m_stateMutex);
</del><ins>+        std::unique_lock&lt;Lock&gt; lock(m_stateMutex);
</ins><span class="cx"> 
</span><span class="cx">         m_completionConditionVariable.wait(lock, [this] { return m_completed; });
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void setCompleted()
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_stateMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_stateMutex);
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(!m_completed);
</span><span class="cx">         m_completed = true;
</span><del>-        m_completionConditionVariable.notify_one();
</del><ins>+        m_completionConditionVariable.notifyOne();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    std::mutex m_stateMutex;
-    std::condition_variable m_completionConditionVariable;
</del><ins>+    Lock m_stateMutex;
+    Condition m_completionConditionVariable;
</ins><span class="cx">     bool m_completed;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -110,7 +112,7 @@
</span><span class="cx"> 
</span><span class="cx"> typedef WTF::Vector&lt;WebThreadBlock&gt; WebThreadRunQueue;
</span><span class="cx"> 
</span><del>-static std::mutex* runQueueMutex;
</del><ins>+static StaticLock runQueueMutex;
</ins><span class="cx"> static CFRunLoopSourceRef runSource;
</span><span class="cx"> static WebThreadRunQueue* runQueue;
</span><span class="cx"> 
</span><span class="lines">@@ -118,13 +120,12 @@
</span><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(info);
</span><span class="cx">     ASSERT(WebThreadIsCurrent());
</span><del>-    ASSERT(runQueueMutex);
</del><span class="cx">     ASSERT(runSource);
</span><span class="cx">     ASSERT(runQueue);
</span><span class="cx"> 
</span><span class="cx">     WebThreadRunQueue queueCopy;
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(*runQueueMutex);
</del><ins>+        std::lock_guard&lt;StaticLock&gt; lock(runQueueMutex);
</ins><span class="cx">         queueCopy = *runQueue;
</span><span class="cx">         runQueue-&gt;clear();
</span><span class="cx">     }
</span><span class="lines">@@ -140,7 +141,6 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ASSERT(runQueueMutex);
</del><span class="cx">     ASSERT(runSource);
</span><span class="cx">     ASSERT(runQueue);
</span><span class="cx"> 
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx">         state = new WebThreadBlockState;
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(*runQueueMutex);
</del><ins>+        std::lock_guard&lt;StaticLock&gt; lock(runQueueMutex);
</ins><span class="cx">         runQueue-&gt;append(WebThreadBlock(task, state));
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -175,7 +175,6 @@
</span><span class="cx"> void WebThreadInitRunQueue()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!runQueue);
</span><del>-    ASSERT(!runQueueMutex);
</del><span class="cx">     ASSERT(!runSource);
</span><span class="cx"> 
</span><span class="cx">     static dispatch_once_t pred;
</span><span class="lines">@@ -185,8 +184,6 @@
</span><span class="cx">         CFRunLoopSourceContext runSourceContext = {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, HandleRunSource};
</span><span class="cx">         runSource = CFRunLoopSourceCreate(NULL, -1, &amp;runSourceContext);
</span><span class="cx">         CFRunLoopAddSource(WebThreadRunLoop(), runSource, kCFRunLoopDefaultMode);
</span><del>-
-        runQueueMutex = std::make_unique&lt;std::mutex&gt;().release();
</del><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacLanguagemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/Language.mm (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/Language.mm        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/mac/Language.mm        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -31,24 +31,15 @@
</span><span class="cx"> #import &quot;WebCoreNSStringExtras.h&quot;
</span><span class="cx"> #import &lt;mutex&gt;
</span><span class="cx"> #import &lt;wtf/Assertions.h&gt;
</span><ins>+#import &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #import &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static std::mutex&amp; preferredLanguagesMutex()
-{
-    static dispatch_once_t onceToken;
-    static std::mutex* mutex;
</del><ins>+static StaticLock preferredLanguagesMutex;
</ins><span class="cx"> 
</span><del>-    dispatch_once(&amp;onceToken, ^{
-        mutex = std::make_unique&lt;std::mutex&gt;().release();
-    });
-
-    return *mutex;
-}
-
</del><span class="cx"> static Vector&lt;String&gt;&amp; preferredLanguages()
</span><span class="cx"> {
</span><span class="cx">     static NeverDestroyed&lt;Vector&lt;String&gt;&gt; languages;
</span><span class="lines">@@ -67,7 +58,7 @@
</span><span class="cx">     UNUSED_PARAM(notification);
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(WebCore::preferredLanguagesMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; lock(WebCore::preferredLanguagesMutex);
</ins><span class="cx">         WebCore::preferredLanguages().clear();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -118,7 +109,7 @@
</span><span class="cx"> 
</span><span class="cx">     BEGIN_BLOCK_OBJC_EXCEPTIONS;
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(preferredLanguagesMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(preferredLanguagesMutex);
</ins><span class="cx">     Vector&lt;String&gt;&amp; userPreferredLanguages = preferredLanguages();
</span><span class="cx"> 
</span><span class="cx">     if (userPreferredLanguages.isEmpty()) {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcfLoaderRunLoopCFcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2009 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2009, 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">@@ -29,9 +29,11 @@
</span><span class="cx"> #if USE(CFNETWORK)
</span><span class="cx"> 
</span><span class="cx"> #include &lt;CoreFoundation/CoreFoundation.h&gt;
</span><del>-#include &lt;condition_variable&gt;
</del><span class="cx"> #include &lt;limits&gt;
</span><ins>+#include &lt;mutex&gt;
</ins><span class="cx"> #include &lt;wtf/AutodrainedPool.h&gt;
</span><ins>+#include &lt;wtf/Condition.h&gt;
+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="lines">@@ -40,20 +42,9 @@
</span><span class="cx"> 
</span><span class="cx"> static CFRunLoopRef loaderRunLoopObject = 0;
</span><span class="cx"> 
</span><del>-static std::mutex&amp; loaderRunLoopMutex()
-{
-    static NeverDestroyed&lt;std::mutex&gt; mutex;
</del><ins>+static StaticLock loaderRunLoopMutex;
+static StaticCondition loaderRunLoopConditionVariable;
</ins><span class="cx"> 
</span><del>-    return mutex;
-}
-
-static std::condition_variable&amp; loaderRunLoopConditionVariable()
-{
-    static NeverDestroyed&lt;std::condition_variable&gt; conditionVariable;
-
-    return conditionVariable;
-}
-
</del><span class="cx"> static void emptyPerform(void*) 
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="lines">@@ -61,7 +52,7 @@
</span><span class="cx"> static void runLoaderThread(void*)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(loaderRunLoopMutex());
</del><ins>+        std::lock_guard&lt;StaticLock&gt; lock(loaderRunLoopMutex);
</ins><span class="cx"> 
</span><span class="cx">         loaderRunLoopObject = CFRunLoopGetCurrent();
</span><span class="cx"> 
</span><span class="lines">@@ -70,7 +61,7 @@
</span><span class="cx">         CFRunLoopSourceRef bogusSource = CFRunLoopSourceCreate(0, 0, &amp;ctxt);
</span><span class="cx">         CFRunLoopAddSource(loaderRunLoopObject, bogusSource, kCFRunLoopDefaultMode);
</span><span class="cx"> 
</span><del>-        loaderRunLoopConditionVariable().notify_one();
</del><ins>+        loaderRunLoopConditionVariable.notifyOne();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     SInt32 result;
</span><span class="lines">@@ -84,12 +75,12 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx"> 
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(loaderRunLoopMutex());
</del><ins>+    std::unique_lock&lt;StaticLock&gt; lock(loaderRunLoopMutex);
</ins><span class="cx"> 
</span><span class="cx">     if (!loaderRunLoopObject) {
</span><span class="cx">         createThread(runLoaderThread, 0, &quot;WebCore: CFNetwork Loader&quot;);
</span><span class="cx"> 
</span><del>-        loaderRunLoopConditionVariable().wait(lock, [] { return loaderRunLoopObject; });
</del><ins>+        loaderRunLoopConditionVariable.wait(lock, [] { return loaderRunLoopObject; });
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return loaderRunLoopObject;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcfSocketStreamHandleCFNetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -39,8 +39,8 @@
</span><span class="cx"> #include &quot;ProtectionSpace.h&quot;
</span><span class="cx"> #include &quot;SocketStreamError.h&quot;
</span><span class="cx"> #include &quot;SocketStreamHandleClient.h&quot;
</span><del>-#include &lt;condition_variable&gt;
-#include &lt;mutex&gt;
</del><ins>+#include &lt;wtf/Condition.h&gt;
+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -136,20 +136,20 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    std::mutex mutex;
-    std::condition_variable conditionVariable;
</del><ins>+    Lock mutex;
+    Condition conditionVariable;
</ins><span class="cx"> 
</span><span class="cx">     bool isFinished = false;
</span><span class="cx"> 
</span><span class="cx">     callOnMainThread([&amp;] {
</span><span class="cx">         function();
</span><span class="cx"> 
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(mutex);
</ins><span class="cx">         isFinished = true;
</span><del>-        conditionVariable.notify_one();
</del><ins>+        conditionVariable.notifyOne();
</ins><span class="cx">     });
</span><span class="cx"> 
</span><del>-    std::unique_lock&lt;std::mutex&gt; lock(mutex);
</del><ins>+    std::unique_lock&lt;Lock&gt; lock(mutex);
</ins><span class="cx">     conditionVariable.wait(lock, [&amp;] { return isFinished; });
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcurlSocketStreamHandleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/curl/SocketStreamHandle.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/curl/SocketStreamHandle.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/network/curl/SocketStreamHandle.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -40,9 +40,8 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;curl/curl.h&gt;
</span><span class="cx"> 
</span><del>-#include &lt;mutex&gt;
-
</del><span class="cx"> #include &lt;wtf/Deque.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/Threading.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -105,8 +104,8 @@
</span><span class="cx"> 
</span><span class="cx">     ThreadIdentifier m_workerThread { 0 };
</span><span class="cx">     std::atomic&lt;bool&gt; m_stopThread { false };
</span><del>-    std::mutex m_mutexSend;
-    std::mutex m_mutexReceive;
</del><ins>+    Lock m_mutexSend;
+    Lock m_mutexReceive;
</ins><span class="cx">     Deque&lt;SocketData&gt; m_sendData;
</span><span class="cx">     Deque&lt;SocketData&gt; m_receiveData;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkcurlSocketStreamHandleCurlcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto copy = createCopy(data, length);
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutexSend);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutexSend);
</ins><span class="cx">     m_sendData.append(SocketData { WTF::move(copy), length });
</span><span class="cx"> 
</span><span class="cx">     return length;
</span><span class="lines">@@ -146,7 +146,7 @@
</span><span class="cx">             const int restLength = sendData.size - totalBytesSent;
</span><span class="cx">             auto copy = createCopy(sendData.data.get() + totalBytesSent, restLength);
</span><span class="cx"> 
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(m_mutexSend);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(m_mutexSend);
</ins><span class="cx">             m_sendData.prepend(SocketData { WTF::move(copy), restLength });
</span><span class="cx"> 
</span><span class="cx">             return false;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformsqlSQLiteDatabaseTrackercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> #include &quot;SQLiteDatabaseTracker.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &lt;mutex&gt;
</span><del>-#include &lt;wtf/NeverDestroyed.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">@@ -36,11 +36,7 @@
</span><span class="cx"> static SQLiteDatabaseTrackerClient* s_staticSQLiteDatabaseTrackerClient = nullptr;
</span><span class="cx"> static unsigned s_transactionInProgressCounter = 0;
</span><span class="cx"> 
</span><del>-static std::mutex&amp; transactionInProgressMutex()
-{
-    static NeverDestroyed&lt;std::mutex&gt; tipMutex;
-    return tipMutex;
-}
</del><ins>+static StaticLock transactionInProgressMutex;
</ins><span class="cx"> 
</span><span class="cx"> void setClient(SQLiteDatabaseTrackerClient* client)
</span><span class="cx"> {
</span><span class="lines">@@ -54,7 +50,7 @@
</span><span class="cx">     if (!s_staticSQLiteDatabaseTrackerClient)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(transactionInProgressMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(transactionInProgressMutex);
</ins><span class="cx"> 
</span><span class="cx">     s_transactionInProgressCounter++;
</span><span class="cx">     if (s_transactionInProgressCounter == 1)
</span><span class="lines">@@ -66,7 +62,7 @@
</span><span class="cx">     if (!s_staticSQLiteDatabaseTrackerClient)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(transactionInProgressMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(transactionInProgressMutex);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(s_transactionInProgressCounter);
</span><span class="cx">     s_transactionInProgressCounter--;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformtextTextBreakIteratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/text/TextBreakIterator.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/text/TextBreakIterator.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/text/TextBreakIterator.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include &quot;UTextProviderUTF16.h&quot;
</span><span class="cx"> #include &lt;mutex&gt;
</span><span class="cx"> #include &lt;wtf/Atomics.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/text/StringView.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -765,8 +766,8 @@
</span><span class="cx"> #if ENABLE(COMPARE_AND_SWAP)
</span><span class="cx">     return WTF::weakCompareAndSwap(reinterpret_cast&lt;void**&gt;(&amp;nonSharedCharacterBreakIterator), expected, newValue);
</span><span class="cx"> #else
</span><del>-    DEPRECATED_DEFINE_STATIC_LOCAL(std::mutex, nonSharedCharacterBreakIteratorMutex, ());
-    std::lock_guard&lt;std::mutex&gt; locker(nonSharedCharacterBreakIteratorMutex);
</del><ins>+    static StaticLock nonSharedCharacterBreakIteratorMutex;
+    std::lock_guard&lt;StaticLock&gt; locker(nonSharedCharacterBreakIteratorMutex);
</ins><span class="cx">     if (nonSharedCharacterBreakIterator != expected)
</span><span class="cx">         return false;
</span><span class="cx">     nonSharedCharacterBreakIterator = newValue;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformtextTextEncodingRegistrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> #include &lt;wtf/ASCIICType.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.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/MainThread.h&gt;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #include &lt;wtf/StdLibExtras.h&gt;
</span><span class="lines">@@ -106,15 +107,8 @@
</span><span class="cx"> typedef HashMap&lt;const char*, const char*, TextEncodingNameHash&gt; TextEncodingNameMap;
</span><span class="cx"> typedef HashMap&lt;const char*, TextCodecFactory&gt; TextCodecMap;
</span><span class="cx"> 
</span><del>-static std::mutex&amp; encodingRegistryMutex()
-{
-    // We don't have to construct this mutex in a thread safe way because this function
-    // is called on the main thread for any page before it is used in worker threads.
-    static NeverDestroyed&lt;std::mutex&gt; mutex;
</del><ins>+static StaticLock encodingRegistryMutex;
</ins><span class="cx"> 
</span><del>-    return mutex;
-}
-
</del><span class="cx"> static TextEncodingNameMap* textEncodingNameMap;
</span><span class="cx"> static TextCodecMap* textCodecMap;
</span><span class="cx"> static bool didExtendTextCodecMaps;
</span><span class="lines">@@ -294,7 +288,7 @@
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr&lt;TextCodec&gt; newTextCodec(const TextEncoding&amp; encoding)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(encodingRegistryMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(encodingRegistryMutex);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(textCodecMap);
</span><span class="cx">     TextCodecFactory factory = textCodecMap-&gt;get(encoding.name());
</span><span class="lines">@@ -310,7 +304,7 @@
</span><span class="cx">     if (!textEncodingNameMap)
</span><span class="cx">         buildBaseTextCodecMaps();
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(encodingRegistryMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(encodingRegistryMutex);
</ins><span class="cx"> 
</span><span class="cx">     if (const char* atomicName = textEncodingNameMap-&gt;get(name))
</span><span class="cx">         return atomicName;
</span><span class="lines">@@ -377,7 +371,7 @@
</span><span class="cx">     unsigned size = textEncodingNameMap-&gt;size();
</span><span class="cx">     fprintf(stderr, &quot;Dumping %u entries in WebCore::textEncodingNameMap...\n&quot;, size);
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(encodingRegistryMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(encodingRegistryMutex);
</ins><span class="cx"> 
</span><span class="cx">     TextEncodingNameMap::const_iterator it = textEncodingNameMap-&gt;begin();
</span><span class="cx">     TextEncodingNameMap::const_iterator end = textEncodingNameMap-&gt;end();
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerThread.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerThread.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebCore/workers/WorkerThread.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> #include &quot;ThreadGlobalData.h&quot;
</span><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &lt;utility&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/Noncopyable.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="lines">@@ -46,18 +47,8 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static std::mutex&amp; threadSetMutex()
-{
-    static std::once_flag onceFlag;
-    static LazyNeverDestroyed&lt;std::mutex&gt; mutex;
</del><ins>+static StaticLock threadSetMutex;
</ins><span class="cx"> 
</span><del>-    std::call_once(onceFlag, []{
-        mutex.construct();
-    });
-
-    return mutex;
-}
-
</del><span class="cx"> static HashSet&lt;WorkerThread*&gt;&amp; workerThreads()
</span><span class="cx"> {
</span><span class="cx">     static NeverDestroyed&lt;HashSet&lt;WorkerThread*&gt;&gt; workerThreads;
</span><span class="lines">@@ -67,7 +58,7 @@
</span><span class="cx"> 
</span><span class="cx"> unsigned WorkerThread::workerThreadCount()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(threadSetMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(threadSetMutex);
</ins><span class="cx"> 
</span><span class="cx">     return workerThreads().size();
</span><span class="cx"> }
</span><span class="lines">@@ -106,14 +97,14 @@
</span><span class="cx">     , m_notificationClient(0)
</span><span class="cx"> #endif
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(threadSetMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(threadSetMutex);
</ins><span class="cx"> 
</span><span class="cx">     workerThreads().add(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WorkerThread::~WorkerThread()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(threadSetMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(threadSetMutex);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(workerThreads().contains(this));
</span><span class="cx">     workerThreads().remove(this);
</span><span class="lines">@@ -221,7 +212,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThread::releaseFastMallocFreeMemoryInAllThreads()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(threadSetMutex());
</del><ins>+    std::lock_guard&lt;StaticLock&gt; lock(threadSetMutex);
</ins><span class="cx"> 
</span><span class="cx">     for (auto* workerThread : workerThreads()) {
</span><span class="cx">         workerThread-&gt;runLoop().postTask([] (ScriptExecutionContext&amp;) {
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/ChangeLog        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -1,3 +1,41 @@
</span><ins>+2015-08-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
+        Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition
+        https://bugs.webkit.org/show_bug.cgi?id=148140
+
+        Reviewed by Geoffrey Garen.
+
+        * NetworkProcess/cache/NetworkCacheStorage.cpp:
+        (WebKit::NetworkCache::Storage::traverse):
+        * Platform/IPC/Connection.cpp:
+        (IPC::Connection::SyncMessageState::processIncomingMessage):
+        (IPC::Connection::SyncMessageState::dispatchMessages):
+        (IPC::Connection::SyncMessageState::dispatchMessageAndResetDidScheduleDispatchMessagesForConnection):
+        (IPC::Connection::sendMessage):
+        (IPC::Connection::waitForMessage):
+        (IPC::Connection::processIncomingMessage):
+        (IPC::Connection::installIncomingSyncMessageCallback):
+        (IPC::Connection::uninstallIncomingSyncMessageCallback):
+        (IPC::Connection::hasIncomingSyncMessage):
+        (IPC::Connection::connectionDidClose):
+        (IPC::Connection::sendOutgoingMessages):
+        (IPC::Connection::enqueueIncomingMessage):
+        (IPC::Connection::dispatchOneMessage):
+        * Platform/IPC/Connection.h:
+        * Shared/BlockingResponseMap.h:
+        (BlockingResponseMap::waitForResponse):
+        (BlockingResponseMap::didReceiveResponse):
+        (BlockingResponseMap::cancel):
+        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
+        (WebKit::PluginInfoCache::saveToFile):
+        (WebKit::PluginInfoCache::updatePluginInfo):
+        * UIProcess/Plugins/gtk/PluginInfoCache.h:
+        * UIProcess/mac/WKPrintingView.h:
+        * UIProcess/mac/WKPrintingView.mm:
+        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
+        (prepareDataForPrintingOnSecondaryThread):
+        (-[WKPrintingView knowsPageRange:]):
+
</ins><span class="cx"> 2015-08-19  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WebKit may keep outdated entry in the disk cache after a reload
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscacheNetworkCacheStoragecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -32,7 +32,9 @@
</span><span class="cx"> #include &quot;NetworkCacheCoders.h&quot;
</span><span class="cx"> #include &quot;NetworkCacheFileSystem.h&quot;
</span><span class="cx"> #include &quot;NetworkCacheIOChannel.h&quot;
</span><del>-#include &lt;condition_variable&gt;
</del><ins>+#include &lt;mutex&gt;
+#include &lt;wtf/Condition.h&gt;
+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/RandomNumber.h&gt;
</span><span class="cx"> #include &lt;wtf/RunLoop.h&gt;
</span><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="lines">@@ -119,8 +121,8 @@
</span><span class="cx">     const TraverseFlags flags;
</span><span class="cx">     const TraverseHandler handler;
</span><span class="cx"> 
</span><del>-    std::mutex activeMutex;
-    std::condition_variable activeCondition;
</del><ins>+    Lock activeMutex;
+    Condition activeCondition;
</ins><span class="cx">     unsigned activeCount { 0 };
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -791,7 +793,7 @@
</span><span class="cx">             if (traverseOperation.flags &amp; TraverseFlag::ShareCount)
</span><span class="cx">                 bodyShareCount = m_blobStorage.shareCount(bodyPathForRecordPath(recordPath));
</span><span class="cx"> 
</span><del>-            std::unique_lock&lt;std::mutex&gt; lock(traverseOperation.activeMutex);
</del><ins>+            std::unique_lock&lt;Lock&gt; lock(traverseOperation.activeMutex);
</ins><span class="cx">             ++traverseOperation.activeCount;
</span><span class="cx"> 
</span><span class="cx">             auto channel = IOChannel::open(recordPath, IOChannel::Type::Read);
</span><span class="lines">@@ -814,9 +816,9 @@
</span><span class="cx">                     traverseOperation.handler(&amp;record, info);
</span><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                std::lock_guard&lt;std::mutex&gt; lock(traverseOperation.activeMutex);
</del><ins>+                std::lock_guard&lt;Lock&gt; lock(traverseOperation.activeMutex);
</ins><span class="cx">                 --traverseOperation.activeCount;
</span><del>-                traverseOperation.activeCondition.notify_one();
</del><ins>+                traverseOperation.activeCondition.notifyOne();
</ins><span class="cx">             });
</span><span class="cx"> 
</span><span class="cx">             const unsigned maximumParallelReadCount = 5;
</span><span class="lines">@@ -825,7 +827,7 @@
</span><span class="cx">             });
</span><span class="cx">         });
</span><span class="cx">         // Wait for all reads to finish.
</span><del>-        std::unique_lock&lt;std::mutex&gt; lock(traverseOperation.activeMutex);
</del><ins>+        std::unique_lock&lt;Lock&gt; lock(traverseOperation.activeMutex);
</ins><span class="cx">         traverseOperation.activeCondition.wait(lock, [&amp;traverseOperation] {
</span><span class="cx">             return !traverseOperation.activeCount;
</span><span class="cx">         });
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/Connection.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/Connection.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/Platform/IPC/Connection.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx">     BinarySemaphore m_waitForSyncReplySemaphore;
</span><span class="cx"> 
</span><span class="cx">     // Protects m_didScheduleDispatchMessagesWorkSet and m_messagesToDispatchWhileWaitingForSyncReply.
</span><del>-    std::mutex m_mutex;
</del><ins>+    Lock m_mutex;
</ins><span class="cx"> 
</span><span class="cx">     // The set of connections for which we've scheduled a call to dispatchMessageAndResetDidScheduleDispatchMessagesForConnection.
</span><span class="cx">     HashSet&lt;RefPtr&lt;Connection&gt;&gt; m_didScheduleDispatchMessagesWorkSet;
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx">     ConnectionAndIncomingMessage connectionAndIncomingMessage { connection, WTF::move(message) };
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         
</span><span class="cx">         if (m_didScheduleDispatchMessagesWorkSet.add(&amp;connection).isNewEntry) {
</span><span class="cx">             RefPtr&lt;Connection&gt; protectedConnection(&amp;connection);
</span><span class="lines">@@ -155,7 +155,7 @@
</span><span class="cx">     Vector&lt;ConnectionAndIncomingMessage&gt; messagesToDispatchWhileWaitingForSyncReply;
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         m_messagesToDispatchWhileWaitingForSyncReply.swap(messagesToDispatchWhileWaitingForSyncReply);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -175,7 +175,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!messagesToPutBack.isEmpty()) {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; message : messagesToPutBack)
</span><span class="cx">             m_messagesToDispatchWhileWaitingForSyncReply.append(WTF::move(message));
</span><span class="lines">@@ -185,7 +185,7 @@
</span><span class="cx"> void Connection::SyncMessageState::dispatchMessageAndResetDidScheduleDispatchMessagesForConnection(Connection&amp; connection)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         ASSERT(m_didScheduleDispatchMessagesWorkSet.contains(&amp;connection));
</span><span class="cx">         m_didScheduleDispatchMessagesWorkSet.remove(&amp;connection);
</span><span class="cx">     }
</span><span class="lines">@@ -363,7 +363,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_outgoingMessagesMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_outgoingMessagesMutex);
</ins><span class="cx">         m_outgoingMessages.append(WTF::move(encoder));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -388,7 +388,7 @@
</span><span class="cx"> 
</span><span class="cx">     // First, check if this message is already in the incoming messages queue.
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_incomingMessagesMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_incomingMessagesMutex);
</ins><span class="cx"> 
</span><span class="cx">         for (auto it = m_incomingMessages.begin(), end = m_incomingMessages.end(); it != end; ++it) {
</span><span class="cx">             std::unique_ptr&lt;MessageDecoder&gt;&amp; message = *it;
</span><span class="lines">@@ -414,7 +414,7 @@
</span><span class="cx">     WaitForMessageState waitingForMessage(messageReceiverName, messageName, destinationID, waitForMessageFlags);
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_waitForMessageMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_waitForMessageMutex);
</ins><span class="cx"> 
</span><span class="cx">         // We don't support having multiple clients waiting for messages.
</span><span class="cx">         ASSERT(!m_waitingForMessage);
</span><span class="lines">@@ -423,8 +423,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Now wait for it to be set.
</span><ins>+    Condition::Clock::time_point absoluteTimeout = Condition::Clock::now() + timeout;
</ins><span class="cx">     while (true) {
</span><del>-        std::unique_lock&lt;std::mutex&gt; lock(m_waitForMessageMutex);
</del><ins>+        std::unique_lock&lt;Lock&gt; lock(m_waitForMessageMutex);
</ins><span class="cx"> 
</span><span class="cx">         if (m_waitingForMessage-&gt;decoder) {
</span><span class="cx">             auto decoder = WTF::move(m_waitingForMessage-&gt;decoder);
</span><span class="lines">@@ -433,9 +434,9 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Now we wait.
</span><del>-        std::cv_status status = m_waitForMessageCondition.wait_for(lock, timeout);
</del><ins>+        bool didTimeout = !m_waitForMessageCondition.waitUntil(lock, absoluteTimeout);
</ins><span class="cx">         // We timed out, lost our connection, or a sync message came in with InterruptWaitingIfSyncMessageArrives, so stop waiting.
</span><del>-        if (status == std::cv_status::timeout || m_waitingForMessage-&gt;messageWaitingInterrupted)
</del><ins>+        if (didTimeout || m_waitingForMessage-&gt;messageWaitingInterrupted)
</ins><span class="cx">             break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -670,7 +671,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (message-&gt;isSyncMessage()) {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_incomingSyncMessageCallbackMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_incomingSyncMessageCallbackMutex);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; callback : m_incomingSyncMessageCallbacks.values())
</span><span class="cx">             m_incomingSyncMessageCallbackQueue-&gt;dispatch(callback);
</span><span class="lines">@@ -686,18 +687,18 @@
</span><span class="cx"> 
</span><span class="cx">     // Check if we're waiting for this message.
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_waitForMessageMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_waitForMessageMutex);
</ins><span class="cx"> 
</span><span class="cx">         if (m_waitingForMessage &amp;&amp; m_waitingForMessage-&gt;messageReceiverName == message-&gt;messageReceiverName() &amp;&amp; m_waitingForMessage-&gt;messageName == message-&gt;messageName() &amp;&amp; m_waitingForMessage-&gt;destinationID == message-&gt;destinationID()) {
</span><span class="cx">             m_waitingForMessage-&gt;decoder = WTF::move(message);
</span><span class="cx">             ASSERT(m_waitingForMessage-&gt;decoder);
</span><del>-            m_waitForMessageCondition.notify_one();
</del><ins>+            m_waitForMessageCondition.notifyOne();
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (m_waitingForMessage &amp;&amp; (m_waitingForMessage-&gt;waitForMessageFlags &amp; InterruptWaitingIfSyncMessageArrives) &amp;&amp; message-&gt;isSyncMessage()) {
</span><span class="cx">             m_waitingForMessage-&gt;messageWaitingInterrupted = true;
</span><del>-            m_waitForMessageCondition.notify_one();
</del><ins>+            m_waitForMessageCondition.notifyOne();
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -706,7 +707,7 @@
</span><span class="cx"> 
</span><span class="cx"> uint64_t Connection::installIncomingSyncMessageCallback(std::function&lt;void ()&gt; callback)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_incomingSyncMessageCallbackMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_incomingSyncMessageCallbackMutex);
</ins><span class="cx"> 
</span><span class="cx">     m_nextIncomingSyncMessageCallbackID++;
</span><span class="cx"> 
</span><span class="lines">@@ -720,13 +721,13 @@
</span><span class="cx"> 
</span><span class="cx"> void Connection::uninstallIncomingSyncMessageCallback(uint64_t callbackID)
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_incomingSyncMessageCallbackMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_incomingSyncMessageCallbackMutex);
</ins><span class="cx">     m_incomingSyncMessageCallbacks.remove(callbackID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool Connection::hasIncomingSyncMessage()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_incomingMessagesMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_incomingMessagesMutex);
</ins><span class="cx"> 
</span><span class="cx">     for (auto&amp; message : m_incomingMessages) {
</span><span class="cx">         if (message-&gt;isSyncMessage())
</span><span class="lines">@@ -763,11 +764,11 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_waitForMessageMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_waitForMessageMutex);
</ins><span class="cx">         if (m_waitingForMessage)
</span><span class="cx">             m_waitingForMessage-&gt;messageWaitingInterrupted = true;
</span><span class="cx">     }
</span><del>-    m_waitForMessageCondition.notify_all();
</del><ins>+    m_waitForMessageCondition.notifyAll();
</ins><span class="cx"> 
</span><span class="cx">     if (m_didCloseOnConnectionWorkQueueCallback)
</span><span class="cx">         m_didCloseOnConnectionWorkQueueCallback(this);
</span><span class="lines">@@ -803,7 +804,7 @@
</span><span class="cx">         std::unique_ptr&lt;MessageEncoder&gt; message;
</span><span class="cx"> 
</span><span class="cx">         {
</span><del>-            std::lock_guard&lt;std::mutex&gt; lock(m_outgoingMessagesMutex);
</del><ins>+            std::lock_guard&lt;Lock&gt; lock(m_outgoingMessagesMutex);
</ins><span class="cx">             if (m_outgoingMessages.isEmpty())
</span><span class="cx">                 break;
</span><span class="cx">             message = m_outgoingMessages.takeFirst();
</span><span class="lines">@@ -862,7 +863,7 @@
</span><span class="cx"> void Connection::enqueueIncomingMessage(std::unique_ptr&lt;MessageDecoder&gt; incomingMessage)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_incomingMessagesMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_incomingMessagesMutex);
</ins><span class="cx">         m_incomingMessages.append(WTF::move(incomingMessage));
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -918,7 +919,7 @@
</span><span class="cx">     std::unique_ptr&lt;MessageDecoder&gt; message;
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_incomingMessagesMutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_incomingMessagesMutex);
</ins><span class="cx">         if (m_incomingMessages.isEmpty())
</span><span class="cx">             return;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/Connection.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/Connection.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/Platform/IPC/Connection.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> #include &quot;MessageReceiver.h&quot;
</span><span class="cx"> #include &quot;ProcessType.h&quot;
</span><span class="cx"> #include &lt;atomic&gt;
</span><del>-#include &lt;condition_variable&gt;
</del><ins>+#include &lt;wtf/Condition.h&gt;
</ins><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><span class="lines">@@ -259,15 +259,15 @@
</span><span class="cx">     bool m_didReceiveInvalidMessage;
</span><span class="cx"> 
</span><span class="cx">     // Incoming messages.
</span><del>-    std::mutex m_incomingMessagesMutex;
</del><ins>+    Lock m_incomingMessagesMutex;
</ins><span class="cx">     Deque&lt;std::unique_ptr&lt;MessageDecoder&gt;&gt; m_incomingMessages;
</span><span class="cx"> 
</span><span class="cx">     // Outgoing messages.
</span><del>-    std::mutex m_outgoingMessagesMutex;
</del><ins>+    Lock m_outgoingMessagesMutex;
</ins><span class="cx">     Deque&lt;std::unique_ptr&lt;MessageEncoder&gt;&gt; m_outgoingMessages;
</span><span class="cx">     
</span><del>-    std::condition_variable m_waitForMessageCondition;
-    std::mutex m_waitForMessageMutex;
</del><ins>+    Condition m_waitForMessageCondition;
+    Lock m_waitForMessageMutex;
</ins><span class="cx"> 
</span><span class="cx">     WaitForMessageState* m_waitingForMessage;
</span><span class="cx"> 
</span><span class="lines">@@ -307,7 +307,7 @@
</span><span class="cx">     typedef HashMap&lt;uint64_t, SecondaryThreadPendingSyncReply*&gt; SecondaryThreadPendingSyncReplyMap;
</span><span class="cx">     SecondaryThreadPendingSyncReplyMap m_secondaryThreadPendingSyncReplyMap;
</span><span class="cx"> 
</span><del>-    std::mutex m_incomingSyncMessageCallbackMutex;
</del><ins>+    Lock m_incomingSyncMessageCallbackMutex;
</ins><span class="cx">     HashMap&lt;uint64_t, std::function&lt;void ()&gt;&gt; m_incomingSyncMessageCallbacks;
</span><span class="cx">     RefPtr&lt;WorkQueue&gt; m_incomingSyncMessageCallbackQueue;
</span><span class="cx">     uint64_t m_nextIncomingSyncMessageCallbackID { 0 };
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedBlockingResponseMaph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/BlockingResponseMap.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/BlockingResponseMap.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/Shared/BlockingResponseMap.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -26,8 +26,9 @@
</span><span class="cx"> #ifndef BlockingResponseMap_h
</span><span class="cx"> #define BlockingResponseMap_h
</span><span class="cx"> 
</span><del>-#include &lt;condition_variable&gt;
</del><ins>+#include &lt;wtf/Condition.h&gt;
</ins><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><ins>+#include &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #include &lt;wtf/Noncopyable.h&gt;
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename T&gt;
</span><span class="lines">@@ -40,7 +41,7 @@
</span><span class="cx">     std::unique_ptr&lt;T&gt; waitForResponse(uint64_t requestID)
</span><span class="cx">     {
</span><span class="cx">         while (true) {
</span><del>-            std::unique_lock&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+            std::unique_lock&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">             if (m_canceled)
</span><span class="cx">                 return nullptr;
</span><span class="lines">@@ -56,26 +57,26 @@
</span><span class="cx"> 
</span><span class="cx">     void didReceiveResponse(uint64_t requestID, std::unique_ptr&lt;T&gt; response)
</span><span class="cx">     {
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         ASSERT(!m_responses.contains(requestID));
</span><span class="cx"> 
</span><span class="cx">         m_responses.set(requestID, WTF::move(response));
</span><span class="cx"> 
</span><del>-        // FIXME: Waking up all threads is quite inefficient.
-        m_condition.notify_all();
</del><ins>+        // FIXME: Could get a slight speed-up from using notifyOne().
+        m_condition.notifyAll();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void cancel()
</span><span class="cx">     {
</span><span class="cx">         m_canceled = true;
</span><span class="cx"> 
</span><del>-        // FIXME: Waking up all threads is quite inefficient.
-        m_condition.notify_all();
</del><ins>+        // FIXME: Could get a slight speed-up from using notifyOne().
+        m_condition.notifyAll();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    std::mutex m_mutex;
-    std::condition_variable m_condition;
</del><ins>+    Lock m_mutex;
+    Condition m_condition;
</ins><span class="cx"> 
</span><span class="cx">     HashMap&lt;uint64_t, std::unique_ptr&lt;T&gt;&gt; m_responses;
</span><span class="cx">     bool m_canceled;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessPluginsgtkPluginInfoCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.cpp        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx"> 
</span><span class="cx"> void PluginInfoCache::saveToFile()
</span><span class="cx"> {
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx"> 
</span><span class="cx">     gsize dataLength;
</span><span class="cx">     GUniquePtr&lt;char&gt; data(g_key_file_to_data(m_cacheFile.get(), &amp;dataLength, nullptr));
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx">     if (m_cachePath &amp;&amp; !m_readOnlyMode) {
</span><span class="cx">         // Save the cache file in an idle to make sure it happens in the main thread and
</span><span class="cx">         // it's done only once when this is called multiple times in a very short time.
</span><del>-        std::lock_guard&lt;std::mutex&gt; lock(m_mutex);
</del><ins>+        std::lock_guard&lt;Lock&gt; lock(m_mutex);
</ins><span class="cx">         if (m_saveToFileIdle.isScheduled())
</span><span class="cx">             return;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessPluginsgtkPluginInfoCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/UIProcess/Plugins/gtk/PluginInfoCache.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;PluginModuleInfo.h&quot;
</span><span class="cx"> #include &lt;mutex&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/glib/GMainLoopSource.h&gt;
</span><span class="cx"> #include &lt;wtf/glib/GUniquePtr.h&gt;
</span><span class="lines">@@ -55,7 +56,7 @@
</span><span class="cx">     GUniquePtr&lt;char&gt; m_cachePath;
</span><span class="cx">     GMainLoopSource m_saveToFileIdle;
</span><span class="cx">     bool m_readOnlyMode;
</span><del>-    std::mutex m_mutex;
</del><ins>+    Lock m_mutex;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWKPrintingViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WKPrintingView.h (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WKPrintingView.h        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/UIProcess/mac/WKPrintingView.h        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -27,6 +27,8 @@
</span><span class="cx"> 
</span><span class="cx"> #import &lt;WebCore/IntRectHash.h&gt;
</span><span class="cx"> #import &lt;condition_variable&gt;
</span><ins>+#import &lt;wtf/Condition.h&gt;
+#import &lt;wtf/Lock.h&gt;
</ins><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -57,8 +59,8 @@
</span><span class="cx">     uint64_t _expectedPrintCallback;
</span><span class="cx"> 
</span><span class="cx">     BOOL _isPrintingFromSecondaryThread;
</span><del>-    std::mutex _printingCallbackMutex;
-    std::condition_variable _printingCallbackCondition;
</del><ins>+    Lock _printingCallbackMutex;
+    Condition _printingCallbackCondition;
</ins><span class="cx"> 
</span><span class="cx">     NSTimer *_autodisplayResumeTimer;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWKPrintingViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WKPrintingView.mm (188641 => 188642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WKPrintingView.mm        2015-08-19 18:13:53 UTC (rev 188641)
+++ trunk/Source/WebKit2/UIProcess/mac/WKPrintingView.mm        2015-08-19 18:18:19 UTC (rev 188642)
</span><span class="lines">@@ -242,11 +242,11 @@
</span><span class="cx">     ASSERT(RunLoop::isMain());
</span><span class="cx"> 
</span><span class="cx">     if (!_webFrame-&gt;page()) {
</span><del>-        _printingCallbackCondition.notify_one();
</del><ins>+        _printingCallbackCondition.notifyOne();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(_printingCallbackMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(_printingCallbackMutex);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT([self _hasPageRects]);
</span><span class="cx">     ASSERT(_printedPagesData.isEmpty());
</span><span class="lines">@@ -278,7 +278,7 @@
</span><span class="cx">             if (data)
</span><span class="cx">                 view-&gt;_printedPagesData.append(data-&gt;bytes(), data-&gt;size());
</span><span class="cx">             view-&gt;_expectedPrintCallback = 0;
</span><del>-            view-&gt;_printingCallbackCondition.notify_one();
</del><ins>+            view-&gt;_printingCallbackCondition.notifyOne();
</ins><span class="cx">         }
</span><span class="cx">     });
</span><span class="cx">     _expectedPrintCallback = callback-&gt;callbackID();
</span><span class="lines">@@ -357,7 +357,7 @@
</span><span class="cx">     ASSERT(RunLoop::isMain());
</span><span class="cx"> 
</span><span class="cx">     WKPrintingView *view = static_cast&lt;WKPrintingView *&gt;(untypedContext);
</span><del>-    std::lock_guard&lt;std::mutex&gt; lock(view-&gt;_printingCallbackMutex);
</del><ins>+    std::lock_guard&lt;Lock&gt; lock(view-&gt;_printingCallbackMutex);
</ins><span class="cx"> 
</span><span class="cx">     // We may have received page rects while a message to call this function traveled from secondary thread to main one.
</span><span class="cx">     if ([view _hasPageRects]) {
</span><span class="lines">@@ -395,7 +395,7 @@
</span><span class="cx">         *range = NSMakeRange(1, _printingPageRects.size());
</span><span class="cx">     else if (!RunLoop::isMain()) {
</span><span class="cx">         ASSERT(![self _isPrintingPreview]);
</span><del>-        std::unique_lock&lt;std::mutex&gt; lock(_printingCallbackMutex);
</del><ins>+        std::unique_lock&lt;Lock&gt; lock(_printingCallbackMutex);
</ins><span class="cx">         callOnMainThread(prepareDataForPrintingOnSecondaryThread, self);
</span><span class="cx">         _printingCallbackCondition.wait(lock);
</span><span class="cx">         *range = NSMakeRange(1, _printingPageRects.size());
</span></span></pre>
</div>
</div>

</body>
</html>