<!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>[277909] trunk/Source/JavaScriptCore</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/277909">277909</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2021-05-21 20:13:17 -0700 (Fri, 21 May 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>Stop using holdLock() in JSC as it is not compatible with Clang thread safety analysis
https://bugs.webkit.org/show_bug.cgi?id=226116

Reviewed by Mark Lam.

Stop using holdLock() in JSC as it is not compatible with Clang thread safety analysis
(WTF::CheckedLock). Use the Locker constructor instead.

I'll eventually get rid of the holdLock() definition once I have managed to get rid of
all its usages.

* API/JSVirtualMachine.mm:
(+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
(+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
(-[JSVirtualMachine addExternalRememberedObject:]):
(-[JSVirtualMachine addManagedReference:withOwner:]):
(-[JSVirtualMachine removeManagedReference:withOwner:]):
(scanExternalObjectGraph):
(scanExternalRememberedSet):
* API/glib/JSCVirtualMachine.cpp:
(addWrapper):
(removeWrapper):
* API/tests/ExecutionTimeLimitTest.cpp:
(testExecutionTimeLimit):
* assembler/PerfLog.cpp:
(JSC::PerfLog::PerfLog):
(JSC::PerfLog::log):
* bytecode/StructureStubInfo.cpp:
(JSC::StructureStubInfo::visitAggregateImpl):
(JSC::StructureStubInfo::visitWeakReferences):
* bytecode/StructureStubInfo.h:
(JSC::StructureStubInfo::considerCaching):
(JSC::StructureStubInfo::clearBufferedStructures):
* bytecode/UnlinkedCodeBlock.cpp:
(JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
(JSC::UnlinkedCodeBlock::visitChildrenImpl):
* bytecode/UnlinkedCodeBlockGenerator.cpp:
(JSC::UnlinkedCodeBlockGenerator::finalize):
* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
* heap/BlockDirectory.cpp:
(JSC::BlockDirectory::~BlockDirectory):
(JSC::BlockDirectory::removeBlock):
(JSC::BlockDirectory::stopAllocatingForGood):
(JSC::BlockDirectory::parallelNotEmptyBlockSource):
* heap/CodeBlockSet.cpp:
(JSC::CodeBlockSet::add):
(JSC::CodeBlockSet::remove):
* heap/CodeBlockSetInlines.h:
(JSC::CodeBlockSet::iterate):
* heap/CompleteSubspace.cpp:
(JSC::CompleteSubspace::allocatorForSlow):
* heap/Heap.cpp:
(JSC::Heap::lastChanceToFinalize):
(JSC::Heap::runNotRunningPhase):
(JSC::Heap::runEndPhase):
(JSC::Heap::finishRelinquishingConn):
(JSC::visitSamplingProfiler):
(JSC::Heap::setBonusVisitorTask):
(JSC::Heap::runTaskInParallel):
* heap/HeapSnapshotBuilder.cpp:
(JSC::HeapSnapshotBuilder::buildSnapshot):
(JSC::HeapSnapshotBuilder::analyzeNode):
(JSC::HeapSnapshotBuilder::analyzeEdge):
(JSC::HeapSnapshotBuilder::analyzePropertyNameEdge):
(JSC::HeapSnapshotBuilder::analyzeVariableNameEdge):
(JSC::HeapSnapshotBuilder::analyzeIndexEdge):
(JSC::HeapSnapshotBuilder::setOpaqueRootReachabilityReasonForCell):
* heap/IsoAlignedMemoryAllocator.cpp:
(JSC::IsoAlignedMemoryAllocator::tryAllocateAlignedMemory):
(JSC::IsoAlignedMemoryAllocator::freeAlignedMemory):
* heap/IsoCellSet.cpp:
(JSC::IsoCellSet::parallelNotEmptyMarkedBlockSource):
(JSC::IsoCellSet::addSlow):
(JSC::IsoCellSet::didRemoveBlock):
(JSC::IsoCellSet::sweepToFreeList):
* heap/IsoCellSetInlines.h:
(JSC::IsoCellSet::forEachMarkedCellInParallel):
* heap/IsoSubspace.cpp:
(JSC::IsoSubspace::IsoSubspace):
* heap/IsoSubspacePerVM.cpp:
(JSC::IsoSubspacePerVM::forVM):
* heap/LocalAllocator.cpp:
(JSC::LocalAllocator::LocalAllocator):
(JSC::LocalAllocator::~LocalAllocator):
* heap/MachineStackMarker.cpp:
(JSC::MachineThreads::tryCopyOtherThreadStacks):
(JSC::MachineThreads::gatherConservativeRoots):
* heap/MarkedBlock.cpp:
(JSC::MarkedBlock::Handle::stopAllocating):
(JSC::MarkedBlock::Handle::resumeAllocating):
(JSC::MarkedBlock::aboutToMarkSlow):
(JSC::MarkedBlock::Handle::didConsumeFreeList):
(JSC::MarkedBlock::noteMarkedSlow):
(JSC::MarkedBlock::Handle::dumpState):
* heap/MarkedBlockInlines.h:
(JSC::MarkedBlock::Handle::isLive):
* heap/MarkingConstraint.cpp:
(JSC::MarkingConstraint::doParallelWork):
* heap/MarkingConstraintSolver.cpp:
(JSC::MarkingConstraintSolver::addParallelTask):
(JSC::MarkingConstraintSolver::runExecutionThread):
* heap/ParallelSourceAdapter.h:
* heap/SlotVisitor.cpp:
(JSC::SlotVisitor::updateMutatorIsStopped):
(JSC::SlotVisitor::drain):
(JSC::SlotVisitor::performIncrementOfDraining):
(JSC::SlotVisitor::drainFromShared):
(JSC::SlotVisitor::drainInParallelPassively):
(JSC::SlotVisitor::waitForTermination):
(JSC::SlotVisitor::donateAll):
(JSC::SlotVisitor::didRace):
* heap/Subspace.cpp:
(JSC::Subspace::parallelDirectorySource):
* heap/SubspaceInlines.h:
(JSC::Subspace::forEachMarkedCellInParallel):
* inspector/JSInjectedScriptHost.cpp:
* jit/ExecutableAllocator.cpp:
* jsc.cpp:
(Worker::Worker):
(Worker::~Worker):
(Worker::dequeue):
(Workers::broadcast):
(Workers::report):
(Workers::tryGetReport):
(Workers::getReport):
(JSC_DEFINE_HOST_FUNCTION):
* runtime/DeferredWorkTimer.cpp:
(JSC::DeferredWorkTimer::doWork):
* runtime/ErrorInstance.cpp:
(JSC::ErrorInstance::finishCreation):
* runtime/EvalExecutable.cpp:
(JSC::EvalExecutable::visitChildrenImpl):
* runtime/FileBasedFuzzerAgentBase.cpp:
(JSC::FileBasedFuzzerAgentBase::getPrediction):
* runtime/FunctionExecutable.cpp:
(JSC::FunctionExecutable::visitChildrenImpl):
* runtime/JSArray.cpp:
(JSC::JSArray::shiftCountWithArrayStorage):
(JSC::JSArray::unshiftCountWithArrayStorage):
* runtime/JSArrayBufferView.cpp:
(JSC::JSArrayBufferView::detach):
(JSC::JSArrayBufferView::slowDownAndWasteMemory):
* runtime/JSCell.h:
* runtime/JSFinalizationRegistry.cpp:
(JSC::JSFinalizationRegistry::visitChildrenImpl):
(JSC::JSFinalizationRegistry::finalizeUnconditionally):
(JSC::JSFinalizationRegistry::takeDeadHoldingsValue):
(JSC::JSFinalizationRegistry::registerTarget):
(JSC::JSFinalizationRegistry::unregister):
* runtime/JSGenericTypedArrayViewInlines.h:
(JSC::JSGenericTypedArrayView<Adaptor>::visitChildrenImpl):
* runtime/JSGlobalObject.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* runtime/JSModuleNamespaceObject.cpp:
(JSC::JSModuleNamespaceObject::finishCreation):
(JSC::JSModuleNamespaceObject::visitChildrenImpl):
* runtime/JSObject.cpp:
(JSC::JSObject::visitButterflyImpl):
* runtime/JSRunLoopTimer.cpp:
(JSC::JSRunLoopTimer::Manager::timerDidFire):
(JSC::JSRunLoopTimer::Manager::registerVM):
(JSC::JSRunLoopTimer::Manager::unregisterVM):
(JSC::JSRunLoopTimer::Manager::scheduleTimer):
(JSC::JSRunLoopTimer::Manager::cancelTimer):
(JSC::JSRunLoopTimer::Manager::timeUntilFire):
(JSC::JSRunLoopTimer::timerDidFire):
(JSC::JSRunLoopTimer::setTimeUntilFire):
(JSC::JSRunLoopTimer::cancelTimer):
(JSC::JSRunLoopTimer::addTimerSetNotification):
(JSC::JSRunLoopTimer::removeTimerSetNotification):
* runtime/JSSegmentedVariableObject.cpp:
(JSC::JSSegmentedVariableObject::findVariableIndex):
(JSC::JSSegmentedVariableObject::addVariables):
(JSC::JSSegmentedVariableObject::visitChildrenImpl):
* runtime/ModuleProgramExecutable.cpp:
(JSC::ModuleProgramExecutable::visitChildrenImpl):
* runtime/NarrowingNumberPredictionFuzzerAgent.cpp:
(JSC::NarrowingNumberPredictionFuzzerAgent::getPrediction):
* runtime/ProgramExecutable.cpp:
(JSC::ProgramExecutable::visitChildrenImpl):
* runtime/RandomizingFuzzerAgent.cpp:
(JSC::RandomizingFuzzerAgent::getPrediction):
* runtime/RegExp.cpp:
(JSC::RegExp::compile):
(JSC::RegExp::matchConcurrently):
(JSC::RegExp::compileMatchOnly):
(JSC::RegExp::deleteCode):
* runtime/SamplingProfiler.cpp:
(JSC::SamplingProfiler::takeSample):
(JSC::SamplingProfiler::stackTracesAsJSON):
(JSC::SamplingProfiler::reportTopFunctions):
(JSC::SamplingProfiler::reportTopBytecodes):
* runtime/ScriptExecutable.cpp:
(JSC::ScriptExecutable::createTemplateObject):
* runtime/SparseArrayValueMap.cpp:
(JSC::SparseArrayValueMap::add):
(JSC::SparseArrayValueMap::remove):
(JSC::SparseArrayValueMap::getConcurrently):
(JSC::SparseArrayValueMap::visitChildrenImpl):
* runtime/Structure.cpp:
(JSC::Structure::changePrototypeTransition):
(JSC::Structure::toDictionaryTransition):
(JSC::Structure::nonPropertyTransitionSlow):
(JSC::Structure::setBrandTransition):
* runtime/StructureCache.cpp:
(JSC::StructureCache::createEmptyStructure):
(JSC::StructureCache::emptyObjectStructureConcurrently):
* runtime/VM.cpp:
(JSC::waitForVMDestruction):
(JSC::VM::~VM):
(JSC::VM::gatherScratchBufferRoots):
(JSC::VM::scratchBufferForSize):
(JSC::VM::clearScratchBuffers):
(JSC::VM::addLoopHintExecutionCounter):
(JSC::VM::getLoopHintExecutionCounter):
(JSC::VM::removeLoopHintExecutionCounter):
* runtime/VMTraps.cpp:
(JSC::VMTraps::tryInstallTrapBreakpoints):
(JSC::VMTraps::invalidateCodeBlocksOnStack):
(JSC::VMTraps::willDestroyVM):
(JSC::VMTraps::fireTrap):
(JSC::VMTraps::handleTraps):
(JSC::VMTraps::takeTopPriorityTrap):
* runtime/WeakMapImpl.cpp:
(JSC::WeakMapImpl<BucketType>::visitOutputConstraints):
* runtime/WeakMapImpl.h:
(JSC::WeakMapImpl::finishCreation):
* runtime/WeakMapImplInlines.h:
(JSC::WeakMapImpl<WeakMapBucket>::rehash):
* runtime/WideningNumberPredictionFuzzerAgent.cpp:
(JSC::WideningNumberPredictionFuzzerAgent::getPrediction):
* tools/CompilerTimingScope.cpp:
* tools/FunctionOverrides.cpp:
(JSC::FunctionOverrides::FunctionOverrides):
(JSC::FunctionOverrides::reinstallOverrides):
(JSC::FunctionOverrides::initializeOverrideFor):
* tools/Integrity.cpp:
(JSC::Integrity::Random::reloadAndCheckShouldAuditSlow):
* tools/VMInspector.cpp:
(JSC::VMInspector::add):
(JSC::VMInspector::remove):
(JSC::VMInspector::codeBlockForMachinePC):
* wasm/WasmBBQPlan.cpp:
(JSC::Wasm::BBQPlan::work):
(JSC::Wasm::BBQPlan::compileFunction):
* wasm/WasmCalleeRegistry.h:
(JSC::Wasm::CalleeRegistry::registerCallee):
(JSC::Wasm::CalleeRegistry::unregisterCallee):
* wasm/WasmCodeBlock.cpp:
(JSC::Wasm::CodeBlock::CodeBlock):
(JSC::Wasm::CodeBlock::waitUntilFinished):
(JSC::Wasm::CodeBlock::compileAsync):
* wasm/WasmContext.cpp:
(JSC::Wasm::Context::scratchBufferForSize):
* wasm/WasmEntryPlan.cpp:
(JSC::Wasm::EntryPlan::parseAndValidateModule):
(JSC::Wasm::EntryPlan::prepare):
(JSC::Wasm::EntryPlan::compileFunctions):
* wasm/WasmEntryPlan.h:
(JSC::Wasm::EntryPlan::tryReserveCapacity):
* wasm/WasmFaultSignalHandler.cpp:
(JSC::Wasm::trapHandler):
* wasm/WasmInstance.cpp:
(JSC::Wasm::Instance::setFunctionWrapper):
* wasm/WasmLLIntPlan.cpp:
(JSC::Wasm::LLIntPlan::compileFunction):
(JSC::Wasm::LLIntPlan::completeInStreaming):
(JSC::Wasm::LLIntPlan::didCompileFunctionInStreaming):
(JSC::Wasm::LLIntPlan::didFailInStreaming):
* wasm/WasmMachineThreads.cpp:
(JSC::Wasm::resetInstructionCacheOnAllThreads):
* wasm/WasmMemory.cpp:
(JSC::Wasm::Memory::growShared):
* wasm/WasmModule.cpp:
(JSC::Wasm::Module::getOrCreateCodeBlock):
* wasm/WasmOMGForOSREntryPlan.cpp:
(JSC::Wasm::OMGForOSREntryPlan::work):
* wasm/WasmOMGPlan.cpp:
(JSC::Wasm::OMGPlan::work):
* wasm/WasmOperations.cpp:
(JSC::Wasm::triggerOMGReplacementCompile):
(JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
* wasm/WasmSignatureInlines.h:
(JSC::Wasm::SignatureInformation::get):
* wasm/WasmSlowPaths.cpp:
(JSC::LLInt::jitCompileAndSetHeuristics):
(JSC::LLInt::WASM_SLOW_PATH_DECL):
* wasm/WasmStreamingCompiler.cpp:
(JSC::Wasm::StreamingCompiler::didCompileFunction):
(JSC::Wasm::StreamingCompiler::finalize):
(JSC::Wasm::StreamingCompiler::fail):
(JSC::Wasm::StreamingCompiler::cancel):
* wasm/WasmStreamingPlan.cpp:
(JSC::Wasm::StreamingPlan::work):
* wasm/WasmTable.cpp:
(JSC::Wasm::Table::grow):
(JSC::Wasm::Table::visitAggregateImpl):
* wasm/WasmThunks.cpp:
(JSC::Wasm::Thunks::stub):
(JSC::Wasm::Thunks::existingStub):
* wasm/WasmWorklist.cpp:
* wasm/js/JSWebAssemblyInstance.cpp:
(JSC::JSWebAssemblyInstance::visitChildrenImpl):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreAPIJSVirtualMachinemm">trunk/Source/JavaScriptCore/API/JSVirtualMachine.mm</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPIglibJSCVirtualMachinecpp">trunk/Source/JavaScriptCore/API/glib/JSCVirtualMachine.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreAPItestsExecutionTimeLimitTestcpp">trunk/Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerPerfLogcpp">trunk/Source/JavaScriptCore/assembler/PerfLog.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeStructureStubInfocpp">trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeStructureStubInfoh">trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockGeneratorcpp">trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh">trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapBlockDirectorycpp">trunk/Source/JavaScriptCore/heap/BlockDirectory.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapCodeBlockSetcpp">trunk/Source/JavaScriptCore/heap/CodeBlockSet.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapCodeBlockSetInlinesh">trunk/Source/JavaScriptCore/heap/CodeBlockSetInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapCompleteSubspacecpp">trunk/Source/JavaScriptCore/heap/CompleteSubspace.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapHeapcpp">trunk/Source/JavaScriptCore/heap/Heap.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapHeapSnapshotBuildercpp">trunk/Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapIsoAlignedMemoryAllocatorcpp">trunk/Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapIsoCellSetcpp">trunk/Source/JavaScriptCore/heap/IsoCellSet.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapIsoCellSetInlinesh">trunk/Source/JavaScriptCore/heap/IsoCellSetInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapIsoSubspacecpp">trunk/Source/JavaScriptCore/heap/IsoSubspace.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapIsoSubspacePerVMcpp">trunk/Source/JavaScriptCore/heap/IsoSubspacePerVM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapLocalAllocatorcpp">trunk/Source/JavaScriptCore/heap/LocalAllocator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapMachineStackMarkercpp">trunk/Source/JavaScriptCore/heap/MachineStackMarker.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapMarkedBlockcpp">trunk/Source/JavaScriptCore/heap/MarkedBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapMarkedBlockInlinesh">trunk/Source/JavaScriptCore/heap/MarkedBlockInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapMarkingConstraintcpp">trunk/Source/JavaScriptCore/heap/MarkingConstraint.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapMarkingConstraintSolvercpp">trunk/Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapParallelSourceAdapterh">trunk/Source/JavaScriptCore/heap/ParallelSourceAdapter.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapSlotVisitorcpp">trunk/Source/JavaScriptCore/heap/SlotVisitor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapSubspacecpp">trunk/Source/JavaScriptCore/heap/Subspace.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapSubspaceInlinesh">trunk/Source/JavaScriptCore/heap/SubspaceInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp">trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitExecutableAllocatorcpp">trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejsccpp">trunk/Source/JavaScriptCore/jsc.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeDeferredWorkTimercpp">trunk/Source/JavaScriptCore/runtime/DeferredWorkTimer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeErrorInstancecpp">trunk/Source/JavaScriptCore/runtime/ErrorInstance.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeEvalExecutablecpp">trunk/Source/JavaScriptCore/runtime/EvalExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFileBasedFuzzerAgentBasecpp">trunk/Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeFunctionExecutablecpp">trunk/Source/JavaScriptCore/runtime/FunctionExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSArraycpp">trunk/Source/JavaScriptCore/runtime/JSArray.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSArrayBufferViewcpp">trunk/Source/JavaScriptCore/runtime/JSArrayBufferView.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSCellh">trunk/Source/JavaScriptCore/runtime/JSCell.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSFinalizationRegistrycpp">trunk/Source/JavaScriptCore/runtime/JSFinalizationRegistry.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGenericTypedArrayViewInlinesh">trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSModuleNamespaceObjectcpp">trunk/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjectcpp">trunk/Source/JavaScriptCore/runtime/JSObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSRunLoopTimercpp">trunk/Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSSegmentedVariableObjectcpp">trunk/Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeModuleProgramExecutablecpp">trunk/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNarrowingNumberPredictionFuzzerAgentcpp">trunk/Source/JavaScriptCore/runtime/NarrowingNumberPredictionFuzzerAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeProgramExecutablecpp">trunk/Source/JavaScriptCore/runtime/ProgramExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRandomizingFuzzerAgentcpp">trunk/Source/JavaScriptCore/runtime/RandomizingFuzzerAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpcpp">trunk/Source/JavaScriptCore/runtime/RegExp.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSamplingProfilercpp">trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeScriptExecutablecpp">trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSparseArrayValueMapcpp">trunk/Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStructurecpp">trunk/Source/JavaScriptCore/runtime/Structure.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStructureCachecpp">trunk/Source/JavaScriptCore/runtime/StructureCache.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMcpp">trunk/Source/JavaScriptCore/runtime/VM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMTrapscpp">trunk/Source/JavaScriptCore/runtime/VMTraps.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeWeakMapImplcpp">trunk/Source/JavaScriptCore/runtime/WeakMapImpl.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeWeakMapImplh">trunk/Source/JavaScriptCore/runtime/WeakMapImpl.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeWeakMapImplInlinesh">trunk/Source/JavaScriptCore/runtime/WeakMapImplInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeWideningNumberPredictionFuzzerAgentcpp">trunk/Source/JavaScriptCore/runtime/WideningNumberPredictionFuzzerAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoretoolsCompilerTimingScopecpp">trunk/Source/JavaScriptCore/tools/CompilerTimingScope.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoretoolsFunctionOverridescpp">trunk/Source/JavaScriptCore/tools/FunctionOverrides.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoretoolsIntegritycpp">trunk/Source/JavaScriptCore/tools/Integrity.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoretoolsVMInspectorcpp">trunk/Source/JavaScriptCore/tools/VMInspector.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmBBQPlancpp">trunk/Source/JavaScriptCore/wasm/WasmBBQPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmCalleeRegistryh">trunk/Source/JavaScriptCore/wasm/WasmCalleeRegistry.h</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmCodeBlockcpp">trunk/Source/JavaScriptCore/wasm/WasmCodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmContextcpp">trunk/Source/JavaScriptCore/wasm/WasmContext.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmEntryPlancpp">trunk/Source/JavaScriptCore/wasm/WasmEntryPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmEntryPlanh">trunk/Source/JavaScriptCore/wasm/WasmEntryPlan.h</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmFaultSignalHandlercpp">trunk/Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmInstancecpp">trunk/Source/JavaScriptCore/wasm/WasmInstance.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmLLIntPlancpp">trunk/Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmMachineThreadscpp">trunk/Source/JavaScriptCore/wasm/WasmMachineThreads.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmMemorycpp">trunk/Source/JavaScriptCore/wasm/WasmMemory.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmModulecpp">trunk/Source/JavaScriptCore/wasm/WasmModule.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmOMGForOSREntryPlancpp">trunk/Source/JavaScriptCore/wasm/WasmOMGForOSREntryPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmOMGPlancpp">trunk/Source/JavaScriptCore/wasm/WasmOMGPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmOperationscpp">trunk/Source/JavaScriptCore/wasm/WasmOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmSignatureInlinesh">trunk/Source/JavaScriptCore/wasm/WasmSignatureInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmSlowPathscpp">trunk/Source/JavaScriptCore/wasm/WasmSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmStreamingCompilercpp">trunk/Source/JavaScriptCore/wasm/WasmStreamingCompiler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmStreamingPlancpp">trunk/Source/JavaScriptCore/wasm/WasmStreamingPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmTablecpp">trunk/Source/JavaScriptCore/wasm/WasmTable.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmThunkscpp">trunk/Source/JavaScriptCore/wasm/WasmThunks.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmWorklistcpp">trunk/Source/JavaScriptCore/wasm/WasmWorklist.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmjsJSWebAssemblyInstancecpp">trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreAPIJSVirtualMachinemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/JSVirtualMachine.mm (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/JSVirtualMachine.mm      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/API/JSVirtualMachine.mm 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -69,13 +69,13 @@
</span><span class="cx"> 
</span><span class="cx"> + (void)addWrapper:(JSVirtualMachine *)wrapper forJSContextGroupRef:(JSContextGroupRef)group
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(wrapperCacheMutex);
</del><ins>+    Locker locker { wrapperCacheMutex };
</ins><span class="cx">     NSMapInsert(wrapperCache(), group, (__bridge void*)wrapper);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> + (JSVirtualMachine *)wrapperForJSContextGroupRef:(JSContextGroupRef)group
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(wrapperCacheMutex);
</del><ins>+    Locker locker { wrapperCacheMutex };
</ins><span class="cx">     return (__bridge JSVirtualMachine *)NSMapGet(wrapperCache(), group);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -156,7 +156,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)addExternalRememberedObject:(id)object
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_externalDataMutex);
</del><ins>+    Locker locker { m_externalDataMutex };
</ins><span class="cx">     ASSERT([self isOldExternalObject:object]);
</span><span class="cx">     [m_externalRememberedSet setObject:@YES forKey:object];
</span><span class="cx"> }
</span><span class="lines">@@ -176,7 +176,7 @@
</span><span class="cx">     if ([self isOldExternalObject:owner] && ![self isOldExternalObject:object])
</span><span class="cx">         [self addExternalRememberedObject:owner];
</span><span class="cx">  
</span><del>-    auto externalDataMutexLocker = holdLock(m_externalDataMutex);
</del><ins>+    Locker externalDataMutexLocker { m_externalDataMutex };
</ins><span class="cx">     RetainPtr<NSMapTable> ownedObjects = [m_externalObjectGraph objectForKey:owner];
</span><span class="cx">     if (!ownedObjects) {
</span><span class="cx">         NSPointerFunctionsOptions weakIDOptions = NSPointerFunctionsWeakMemory | NSPointerFunctionsObjectPersonality;
</span><span class="lines">@@ -203,7 +203,7 @@
</span><span class="cx">     
</span><span class="cx">     JSC::JSLockHolder locker(toJS(m_group));
</span><span class="cx">     
</span><del>-    auto externalDataMutexLocker = holdLock(m_externalDataMutex);
</del><ins>+    Locker externalDataMutexLocker { m_externalDataMutex };
</ins><span class="cx">     NSMapTable *ownedObjects = [m_externalObjectGraph objectForKey:owner];
</span><span class="cx">     if (!ownedObjects)
</span><span class="cx">         return;
</span><span class="lines">@@ -341,7 +341,7 @@
</span><span class="cx">             if (lockAcquired)
</span><span class="cx">                 appendOwnedObjects();
</span><span class="cx">             else {
</span><del>-                auto locker = holdLock(externalDataMutex);
</del><ins>+                Locker locker { externalDataMutex };
</ins><span class="cx">                 appendOwnedObjects();
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -361,7 +361,7 @@
</span><span class="cx">         if (!virtualMachine)
</span><span class="cx">             return;
</span><span class="cx">         Lock& externalDataMutex = [virtualMachine externalDataMutex];
</span><del>-        auto locker = holdLock(externalDataMutex);
</del><ins>+        Locker locker { externalDataMutex };
</ins><span class="cx">         NSMapTable *externalObjectGraph = [virtualMachine externalObjectGraph];
</span><span class="cx">         NSMapTable *externalRememberedSet = [virtualMachine externalRememberedSet];
</span><span class="cx">         for (id key in externalRememberedSet) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPIglibJSCVirtualMachinecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/glib/JSCVirtualMachine.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/glib/JSCVirtualMachine.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/API/glib/JSCVirtualMachine.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> 
</span><span class="cx"> static void addWrapper(JSContextGroupRef group, JSCVirtualMachine* vm)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(wrapperCacheMutex);
</del><ins>+    Locker locker { wrapperCacheMutex };
</ins><span class="cx">     ASSERT(!wrapperMap().contains(group));
</span><span class="cx">     wrapperMap().set(group, vm);
</span><span class="cx"> }
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx"> 
</span><span class="cx"> static void removeWrapper(JSContextGroupRef group)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(wrapperCacheMutex);
</del><ins>+    Locker locker { wrapperCacheMutex };
</ins><span class="cx">     ASSERT(wrapperMap().contains(group));
</span><span class="cx">     wrapperMap().remove(group);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreAPItestsExecutionTimeLimitTestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -505,12 +505,12 @@
</span><span class="cx">                 startTimeRef = CPUTime::forCurrentThread();
</span><span class="cx">                 JSEvaluateScript(contextRef, scriptRef, nullptr, nullptr, 1, &exceptionRef);
</span><span class="cx">                 endTimeRef = CPUTime::forCurrentThread();
</span><del>-                auto locker = WTF::holdLock(syncLockRef);
</del><ins>+                Locker locker { syncLockRef };
</ins><span class="cx">                 didSynchronizeRef = true;
</span><span class="cx">                 synchronizeRef.notifyAll();
</span><span class="cx">             });
</span><span class="cx"> 
</span><del>-            auto locker = holdLock(syncLock);
</del><ins>+            Locker locker { syncLock };
</ins><span class="cx">             synchronize.wait(syncLock, [&] { return didSynchronize; });
</span><span class="cx"> 
</span><span class="cx">             if (((endTime - startTime) < timeAfterWatchdogShouldHaveFired) && dispatchTerminateCallbackCalled)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog    2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/ChangeLog       2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -1,3 +1,310 @@
</span><ins>+2021-05-21  Chris Dumez  <cdumez@apple.com>
+
+        Stop using holdLock() in JSC as it is not compatible with Clang thread safety analysis
+        https://bugs.webkit.org/show_bug.cgi?id=226116
+
+        Reviewed by Mark Lam.
+
+        Stop using holdLock() in JSC as it is not compatible with Clang thread safety analysis
+        (WTF::CheckedLock). Use the Locker constructor instead.
+
+        I'll eventually get rid of the holdLock() definition once I have managed to get rid of
+        all its usages.
+
+        * API/JSVirtualMachine.mm:
+        (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
+        (+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
+        (-[JSVirtualMachine addExternalRememberedObject:]):
+        (-[JSVirtualMachine addManagedReference:withOwner:]):
+        (-[JSVirtualMachine removeManagedReference:withOwner:]):
+        (scanExternalObjectGraph):
+        (scanExternalRememberedSet):
+        * API/glib/JSCVirtualMachine.cpp:
+        (addWrapper):
+        (removeWrapper):
+        * API/tests/ExecutionTimeLimitTest.cpp:
+        (testExecutionTimeLimit):
+        * assembler/PerfLog.cpp:
+        (JSC::PerfLog::PerfLog):
+        (JSC::PerfLog::log):
+        * bytecode/StructureStubInfo.cpp:
+        (JSC::StructureStubInfo::visitAggregateImpl):
+        (JSC::StructureStubInfo::visitWeakReferences):
+        * bytecode/StructureStubInfo.h:
+        (JSC::StructureStubInfo::considerCaching):
+        (JSC::StructureStubInfo::clearBufferedStructures):
+        * bytecode/UnlinkedCodeBlock.cpp:
+        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
+        (JSC::UnlinkedCodeBlock::visitChildrenImpl):
+        * bytecode/UnlinkedCodeBlockGenerator.cpp:
+        (JSC::UnlinkedCodeBlockGenerator::finalize):
+        * dfg/DFGAbstractInterpreterInlines.h:
+        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
+        * heap/BlockDirectory.cpp:
+        (JSC::BlockDirectory::~BlockDirectory):
+        (JSC::BlockDirectory::removeBlock):
+        (JSC::BlockDirectory::stopAllocatingForGood):
+        (JSC::BlockDirectory::parallelNotEmptyBlockSource):
+        * heap/CodeBlockSet.cpp:
+        (JSC::CodeBlockSet::add):
+        (JSC::CodeBlockSet::remove):
+        * heap/CodeBlockSetInlines.h:
+        (JSC::CodeBlockSet::iterate):
+        * heap/CompleteSubspace.cpp:
+        (JSC::CompleteSubspace::allocatorForSlow):
+        * heap/Heap.cpp:
+        (JSC::Heap::lastChanceToFinalize):
+        (JSC::Heap::runNotRunningPhase):
+        (JSC::Heap::runEndPhase):
+        (JSC::Heap::finishRelinquishingConn):
+        (JSC::visitSamplingProfiler):
+        (JSC::Heap::setBonusVisitorTask):
+        (JSC::Heap::runTaskInParallel):
+        * heap/HeapSnapshotBuilder.cpp:
+        (JSC::HeapSnapshotBuilder::buildSnapshot):
+        (JSC::HeapSnapshotBuilder::analyzeNode):
+        (JSC::HeapSnapshotBuilder::analyzeEdge):
+        (JSC::HeapSnapshotBuilder::analyzePropertyNameEdge):
+        (JSC::HeapSnapshotBuilder::analyzeVariableNameEdge):
+        (JSC::HeapSnapshotBuilder::analyzeIndexEdge):
+        (JSC::HeapSnapshotBuilder::setOpaqueRootReachabilityReasonForCell):
+        * heap/IsoAlignedMemoryAllocator.cpp:
+        (JSC::IsoAlignedMemoryAllocator::tryAllocateAlignedMemory):
+        (JSC::IsoAlignedMemoryAllocator::freeAlignedMemory):
+        * heap/IsoCellSet.cpp:
+        (JSC::IsoCellSet::parallelNotEmptyMarkedBlockSource):
+        (JSC::IsoCellSet::addSlow):
+        (JSC::IsoCellSet::didRemoveBlock):
+        (JSC::IsoCellSet::sweepToFreeList):
+        * heap/IsoCellSetInlines.h:
+        (JSC::IsoCellSet::forEachMarkedCellInParallel):
+        * heap/IsoSubspace.cpp:
+        (JSC::IsoSubspace::IsoSubspace):
+        * heap/IsoSubspacePerVM.cpp:
+        (JSC::IsoSubspacePerVM::forVM):
+        * heap/LocalAllocator.cpp:
+        (JSC::LocalAllocator::LocalAllocator):
+        (JSC::LocalAllocator::~LocalAllocator):
+        * heap/MachineStackMarker.cpp:
+        (JSC::MachineThreads::tryCopyOtherThreadStacks):
+        (JSC::MachineThreads::gatherConservativeRoots):
+        * heap/MarkedBlock.cpp:
+        (JSC::MarkedBlock::Handle::stopAllocating):
+        (JSC::MarkedBlock::Handle::resumeAllocating):
+        (JSC::MarkedBlock::aboutToMarkSlow):
+        (JSC::MarkedBlock::Handle::didConsumeFreeList):
+        (JSC::MarkedBlock::noteMarkedSlow):
+        (JSC::MarkedBlock::Handle::dumpState):
+        * heap/MarkedBlockInlines.h:
+        (JSC::MarkedBlock::Handle::isLive):
+        * heap/MarkingConstraint.cpp:
+        (JSC::MarkingConstraint::doParallelWork):
+        * heap/MarkingConstraintSolver.cpp:
+        (JSC::MarkingConstraintSolver::addParallelTask):
+        (JSC::MarkingConstraintSolver::runExecutionThread):
+        * heap/ParallelSourceAdapter.h:
+        * heap/SlotVisitor.cpp:
+        (JSC::SlotVisitor::updateMutatorIsStopped):
+        (JSC::SlotVisitor::drain):
+        (JSC::SlotVisitor::performIncrementOfDraining):
+        (JSC::SlotVisitor::drainFromShared):
+        (JSC::SlotVisitor::drainInParallelPassively):
+        (JSC::SlotVisitor::waitForTermination):
+        (JSC::SlotVisitor::donateAll):
+        (JSC::SlotVisitor::didRace):
+        * heap/Subspace.cpp:
+        (JSC::Subspace::parallelDirectorySource):
+        * heap/SubspaceInlines.h:
+        (JSC::Subspace::forEachMarkedCellInParallel):
+        * inspector/JSInjectedScriptHost.cpp:
+        * jit/ExecutableAllocator.cpp:
+        * jsc.cpp:
+        (Worker::Worker):
+        (Worker::~Worker):
+        (Worker::dequeue):
+        (Workers::broadcast):
+        (Workers::report):
+        (Workers::tryGetReport):
+        (Workers::getReport):
+        (JSC_DEFINE_HOST_FUNCTION):
+        * runtime/DeferredWorkTimer.cpp:
+        (JSC::DeferredWorkTimer::doWork):
+        * runtime/ErrorInstance.cpp:
+        (JSC::ErrorInstance::finishCreation):
+        * runtime/EvalExecutable.cpp:
+        (JSC::EvalExecutable::visitChildrenImpl):
+        * runtime/FileBasedFuzzerAgentBase.cpp:
+        (JSC::FileBasedFuzzerAgentBase::getPrediction):
+        * runtime/FunctionExecutable.cpp:
+        (JSC::FunctionExecutable::visitChildrenImpl):
+        * runtime/JSArray.cpp:
+        (JSC::JSArray::shiftCountWithArrayStorage):
+        (JSC::JSArray::unshiftCountWithArrayStorage):
+        * runtime/JSArrayBufferView.cpp:
+        (JSC::JSArrayBufferView::detach):
+        (JSC::JSArrayBufferView::slowDownAndWasteMemory):
+        * runtime/JSCell.h:
+        * runtime/JSFinalizationRegistry.cpp:
+        (JSC::JSFinalizationRegistry::visitChildrenImpl):
+        (JSC::JSFinalizationRegistry::finalizeUnconditionally):
+        (JSC::JSFinalizationRegistry::takeDeadHoldingsValue):
+        (JSC::JSFinalizationRegistry::registerTarget):
+        (JSC::JSFinalizationRegistry::unregister):
+        * runtime/JSGenericTypedArrayViewInlines.h:
+        (JSC::JSGenericTypedArrayView<Adaptor>::visitChildrenImpl):
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSC_DEFINE_HOST_FUNCTION):
+        * runtime/JSModuleNamespaceObject.cpp:
+        (JSC::JSModuleNamespaceObject::finishCreation):
+        (JSC::JSModuleNamespaceObject::visitChildrenImpl):
+        * runtime/JSObject.cpp:
+        (JSC::JSObject::visitButterflyImpl):
+        * runtime/JSRunLoopTimer.cpp:
+        (JSC::JSRunLoopTimer::Manager::timerDidFire):
+        (JSC::JSRunLoopTimer::Manager::registerVM):
+        (JSC::JSRunLoopTimer::Manager::unregisterVM):
+        (JSC::JSRunLoopTimer::Manager::scheduleTimer):
+        (JSC::JSRunLoopTimer::Manager::cancelTimer):
+        (JSC::JSRunLoopTimer::Manager::timeUntilFire):
+        (JSC::JSRunLoopTimer::timerDidFire):
+        (JSC::JSRunLoopTimer::setTimeUntilFire):
+        (JSC::JSRunLoopTimer::cancelTimer):
+        (JSC::JSRunLoopTimer::addTimerSetNotification):
+        (JSC::JSRunLoopTimer::removeTimerSetNotification):
+        * runtime/JSSegmentedVariableObject.cpp:
+        (JSC::JSSegmentedVariableObject::findVariableIndex):
+        (JSC::JSSegmentedVariableObject::addVariables):
+        (JSC::JSSegmentedVariableObject::visitChildrenImpl):
+        * runtime/ModuleProgramExecutable.cpp:
+        (JSC::ModuleProgramExecutable::visitChildrenImpl):
+        * runtime/NarrowingNumberPredictionFuzzerAgent.cpp:
+        (JSC::NarrowingNumberPredictionFuzzerAgent::getPrediction):
+        * runtime/ProgramExecutable.cpp:
+        (JSC::ProgramExecutable::visitChildrenImpl):
+        * runtime/RandomizingFuzzerAgent.cpp:
+        (JSC::RandomizingFuzzerAgent::getPrediction):
+        * runtime/RegExp.cpp:
+        (JSC::RegExp::compile):
+        (JSC::RegExp::matchConcurrently):
+        (JSC::RegExp::compileMatchOnly):
+        (JSC::RegExp::deleteCode):
+        * runtime/SamplingProfiler.cpp:
+        (JSC::SamplingProfiler::takeSample):
+        (JSC::SamplingProfiler::stackTracesAsJSON):
+        (JSC::SamplingProfiler::reportTopFunctions):
+        (JSC::SamplingProfiler::reportTopBytecodes):
+        * runtime/ScriptExecutable.cpp:
+        (JSC::ScriptExecutable::createTemplateObject):
+        * runtime/SparseArrayValueMap.cpp:
+        (JSC::SparseArrayValueMap::add):
+        (JSC::SparseArrayValueMap::remove):
+        (JSC::SparseArrayValueMap::getConcurrently):
+        (JSC::SparseArrayValueMap::visitChildrenImpl):
+        * runtime/Structure.cpp:
+        (JSC::Structure::changePrototypeTransition):
+        (JSC::Structure::toDictionaryTransition):
+        (JSC::Structure::nonPropertyTransitionSlow):
+        (JSC::Structure::setBrandTransition):
+        * runtime/StructureCache.cpp:
+        (JSC::StructureCache::createEmptyStructure):
+        (JSC::StructureCache::emptyObjectStructureConcurrently):
+        * runtime/VM.cpp:
+        (JSC::waitForVMDestruction):
+        (JSC::VM::~VM):
+        (JSC::VM::gatherScratchBufferRoots):
+        (JSC::VM::scratchBufferForSize):
+        (JSC::VM::clearScratchBuffers):
+        (JSC::VM::addLoopHintExecutionCounter):
+        (JSC::VM::getLoopHintExecutionCounter):
+        (JSC::VM::removeLoopHintExecutionCounter):
+        * runtime/VMTraps.cpp:
+        (JSC::VMTraps::tryInstallTrapBreakpoints):
+        (JSC::VMTraps::invalidateCodeBlocksOnStack):
+        (JSC::VMTraps::willDestroyVM):
+        (JSC::VMTraps::fireTrap):
+        (JSC::VMTraps::handleTraps):
+        (JSC::VMTraps::takeTopPriorityTrap):
+        * runtime/WeakMapImpl.cpp:
+        (JSC::WeakMapImpl<BucketType>::visitOutputConstraints):
+        * runtime/WeakMapImpl.h:
+        (JSC::WeakMapImpl::finishCreation):
+        * runtime/WeakMapImplInlines.h:
+        (JSC::WeakMapImpl<WeakMapBucket>::rehash):
+        * runtime/WideningNumberPredictionFuzzerAgent.cpp:
+        (JSC::WideningNumberPredictionFuzzerAgent::getPrediction):
+        * tools/CompilerTimingScope.cpp:
+        * tools/FunctionOverrides.cpp:
+        (JSC::FunctionOverrides::FunctionOverrides):
+        (JSC::FunctionOverrides::reinstallOverrides):
+        (JSC::FunctionOverrides::initializeOverrideFor):
+        * tools/Integrity.cpp:
+        (JSC::Integrity::Random::reloadAndCheckShouldAuditSlow):
+        * tools/VMInspector.cpp:
+        (JSC::VMInspector::add):
+        (JSC::VMInspector::remove):
+        (JSC::VMInspector::codeBlockForMachinePC):
+        * wasm/WasmBBQPlan.cpp:
+        (JSC::Wasm::BBQPlan::work):
+        (JSC::Wasm::BBQPlan::compileFunction):
+        * wasm/WasmCalleeRegistry.h:
+        (JSC::Wasm::CalleeRegistry::registerCallee):
+        (JSC::Wasm::CalleeRegistry::unregisterCallee):
+        * wasm/WasmCodeBlock.cpp:
+        (JSC::Wasm::CodeBlock::CodeBlock):
+        (JSC::Wasm::CodeBlock::waitUntilFinished):
+        (JSC::Wasm::CodeBlock::compileAsync):
+        * wasm/WasmContext.cpp:
+        (JSC::Wasm::Context::scratchBufferForSize):
+        * wasm/WasmEntryPlan.cpp:
+        (JSC::Wasm::EntryPlan::parseAndValidateModule):
+        (JSC::Wasm::EntryPlan::prepare):
+        (JSC::Wasm::EntryPlan::compileFunctions):
+        * wasm/WasmEntryPlan.h:
+        (JSC::Wasm::EntryPlan::tryReserveCapacity):
+        * wasm/WasmFaultSignalHandler.cpp:
+        (JSC::Wasm::trapHandler):
+        * wasm/WasmInstance.cpp:
+        (JSC::Wasm::Instance::setFunctionWrapper):
+        * wasm/WasmLLIntPlan.cpp:
+        (JSC::Wasm::LLIntPlan::compileFunction):
+        (JSC::Wasm::LLIntPlan::completeInStreaming):
+        (JSC::Wasm::LLIntPlan::didCompileFunctionInStreaming):
+        (JSC::Wasm::LLIntPlan::didFailInStreaming):
+        * wasm/WasmMachineThreads.cpp:
+        (JSC::Wasm::resetInstructionCacheOnAllThreads):
+        * wasm/WasmMemory.cpp:
+        (JSC::Wasm::Memory::growShared):
+        * wasm/WasmModule.cpp:
+        (JSC::Wasm::Module::getOrCreateCodeBlock):
+        * wasm/WasmOMGForOSREntryPlan.cpp:
+        (JSC::Wasm::OMGForOSREntryPlan::work):
+        * wasm/WasmOMGPlan.cpp:
+        (JSC::Wasm::OMGPlan::work):
+        * wasm/WasmOperations.cpp:
+        (JSC::Wasm::triggerOMGReplacementCompile):
+        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
+        * wasm/WasmSignatureInlines.h:
+        (JSC::Wasm::SignatureInformation::get):
+        * wasm/WasmSlowPaths.cpp:
+        (JSC::LLInt::jitCompileAndSetHeuristics):
+        (JSC::LLInt::WASM_SLOW_PATH_DECL):
+        * wasm/WasmStreamingCompiler.cpp:
+        (JSC::Wasm::StreamingCompiler::didCompileFunction):
+        (JSC::Wasm::StreamingCompiler::finalize):
+        (JSC::Wasm::StreamingCompiler::fail):
+        (JSC::Wasm::StreamingCompiler::cancel):
+        * wasm/WasmStreamingPlan.cpp:
+        (JSC::Wasm::StreamingPlan::work):
+        * wasm/WasmTable.cpp:
+        (JSC::Wasm::Table::grow):
+        (JSC::Wasm::Table::visitAggregateImpl):
+        * wasm/WasmThunks.cpp:
+        (JSC::Wasm::Thunks::stub):
+        (JSC::Wasm::Thunks::existingStub):
+        * wasm/WasmWorklist.cpp:
+        * wasm/js/JSWebAssemblyInstance.cpp:
+        (JSC::JSWebAssemblyInstance::visitChildrenImpl):
+
</ins><span class="cx"> 2021-05-21  Mark Lam  <mark.lam@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Remove the unnecessary use of CompileOpStrictEqType.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerPerfLogcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/PerfLog.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/PerfLog.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/assembler/PerfLog.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx">     header.timestamp = generateTimestamp();
</span><span class="cx">     header.pid = getCurrentProcessID();
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     write(locker, &header, sizeof(JITDump::FileHeader));
</span><span class="cx">     flush(locker);
</span><span class="cx"> }
</span><span class="lines">@@ -188,7 +188,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     PerfLog& logger = singleton();
</span><del>-    auto locker = holdLock(logger.m_lock);
</del><ins>+    Locker locker { logger.m_lock };
</ins><span class="cx"> 
</span><span class="cx">     JITDump::CodeLoadRecord record;
</span><span class="cx">     record.header.timestamp = generateTimestamp();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeStructureStubInfocpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -300,7 +300,7 @@
</span><span class="cx"> void StructureStubInfo::visitAggregateImpl(Visitor& visitor)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_bufferedStructuresLock);
</del><ins>+        Locker locker { m_bufferedStructuresLock };
</ins><span class="cx">         for (auto& bufferedStructure : m_bufferedStructures)
</span><span class="cx">             bufferedStructure.byValId().visitAggregate(visitor);
</span><span class="cx">     }
</span><span class="lines">@@ -329,7 +329,7 @@
</span><span class="cx"> {
</span><span class="cx">     VM& vm = codeBlock->vm();
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_bufferedStructuresLock);
</del><ins>+        Locker locker { m_bufferedStructuresLock };
</ins><span class="cx">         m_bufferedStructures.removeIf(
</span><span class="cx">             [&] (auto& entry) -> bool {
</span><span class="cx">                 return !vm.heap.isMarked(entry.structure());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeStructureStubInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -249,7 +249,7 @@
</span><span class="cx">             // the prototype is fixed.
</span><span class="cx">             bool isNewlyAdded = false;
</span><span class="cx">             {
</span><del>-                auto locker = holdLock(m_bufferedStructuresLock);
</del><ins>+                Locker locker { m_bufferedStructuresLock };
</ins><span class="cx">                 isNewlyAdded = m_bufferedStructures.add({ structure, impl }).isNewEntry;
</span><span class="cx">             }
</span><span class="cx">             if (isNewlyAdded)
</span><span class="lines">@@ -264,7 +264,7 @@
</span><span class="cx"> 
</span><span class="cx">     void clearBufferedStructures()
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_bufferedStructuresLock);
</del><ins>+        Locker locker { m_bufferedStructuresLock };
</ins><span class="cx">         m_bufferedStructures.clear();
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -66,12 +66,12 @@
</span><span class="cx">     ASSERT(m_codeType == static_cast<unsigned>(codeType));
</span><span class="cx">     ASSERT(m_didOptimize == static_cast<unsigned>(TriState::Indeterminate));
</span><span class="cx">     if (info.needsClassFieldInitializer() == NeedsClassFieldInitializer::Yes) {
</span><del>-        auto locker = holdLock(cellLock());
</del><ins>+        Locker locker { cellLock() };
</ins><span class="cx">         createRareDataIfNecessary(locker);
</span><span class="cx">         m_rareData->m_needsClassFieldInitializer = static_cast<unsigned>(NeedsClassFieldInitializer::Yes);
</span><span class="cx">     }
</span><span class="cx">     if (info.privateBrandRequirement() == PrivateBrandRequirement::Needed) {
</span><del>-        auto locker = holdLock(cellLock());
</del><ins>+        Locker locker { cellLock() };
</ins><span class="cx">         createRareDataIfNecessary(locker);
</span><span class="cx">         m_rareData->m_privateBrandRequirement = static_cast<unsigned>(PrivateBrandRequirement::Needed);
</span><span class="cx">     }
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">     UnlinkedCodeBlock* thisObject = jsCast<UnlinkedCodeBlock*>(cell);
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><span class="cx">     Base::visitChildren(thisObject, visitor);
</span><del>-    auto locker = holdLock(thisObject->cellLock());
</del><ins>+    Locker locker { thisObject->cellLock() };
</ins><span class="cx">     if (visitor.isFirstVisit())
</span><span class="cx">         thisObject->m_age = std::min<unsigned>(static_cast<unsigned>(thisObject->m_age) + 1, maxAge);
</span><span class="cx">     for (auto& barrier : thisObject->m_functionDecls)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeUnlinkedCodeBlockGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(instructions);
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_codeBlock->cellLock());
</del><ins>+        Locker locker { m_codeBlock->cellLock() };
</ins><span class="cx">         m_codeBlock->m_instructions = WTFMove(instructions);
</span><span class="cx">         m_codeBlock->m_metadata->finalize();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -2255,7 +2255,7 @@
</span><span class="cx">                     JSValue value;
</span><span class="cx">                     {
</span><span class="cx">                         // ArrayStorage's Butterfly can be half-broken state.
</span><del>-                        auto locker = holdLock(array->cellLock());
</del><ins>+                        Locker locker { array->cellLock() };
</ins><span class="cx"> 
</span><span class="cx">                         WTF::loadLoadFence();
</span><span class="cx">                         Butterfly* butterfly = array->butterfly();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapBlockDirectorycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/BlockDirectory.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/BlockDirectory.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/BlockDirectory.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx"> 
</span><span class="cx"> BlockDirectory::~BlockDirectory()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_localAllocatorsLock);
</del><ins>+    Locker locker { m_localAllocatorsLock };
</ins><span class="cx">     while (!m_localAllocators.isEmpty())
</span><span class="cx">         m_localAllocators.begin()->remove();
</span><span class="cx"> }
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">     m_freeBlockIndices.append(block->index());
</span><span class="cx">     
</span><span class="cx">     forEachBitVector(
</span><del>-        holdLock(m_bitvectorLock),
</del><ins>+        Locker { m_bitvectorLock },
</ins><span class="cx">         [&](auto vectorRef) {
</span><span class="cx">             vectorRef[block->index()] = false;
</span><span class="cx">         });
</span><span class="lines">@@ -216,7 +216,7 @@
</span><span class="cx">             allocator->stopAllocatingForGood();
</span><span class="cx">         });
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_localAllocatorsLock);
</del><ins>+    Locker locker { m_localAllocatorsLock };
</ins><span class="cx">     while (!m_localAllocators.isEmpty())
</span><span class="cx">         m_localAllocators.begin()->remove();
</span><span class="cx"> }
</span><span class="lines">@@ -333,7 +333,7 @@
</span><span class="cx">         {
</span><span class="cx">             if (m_done)
</span><span class="cx">                 return nullptr;
</span><del>-            auto locker = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             m_index = m_directory.m_bits.markingNotEmpty().findBit(m_index, true);
</span><span class="cx">             if (m_index >= m_directory.m_blocks.size()) {
</span><span class="cx">                 m_done = true;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapCodeBlockSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/CodeBlockSet.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/CodeBlockSet.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/CodeBlockSet.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx"> 
</span><span class="cx"> void CodeBlockSet::add(CodeBlock* codeBlock)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     auto result = m_codeBlocks.add(codeBlock);
</span><span class="cx">     RELEASE_ASSERT(result);
</span><span class="cx"> }
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx"> 
</span><span class="cx"> void CodeBlockSet::remove(CodeBlock* codeBlock)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     bool result = m_codeBlocks.remove(codeBlock);
</span><span class="cx">     RELEASE_ASSERT(result);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapCodeBlockSetInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/CodeBlockSetInlines.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/CodeBlockSetInlines.h   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/CodeBlockSetInlines.h      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> template<typename Functor>
</span><span class="cx"> void CodeBlockSet::iterate(const Functor& functor)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     iterate(locker, functor);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapCompleteSubspacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/CompleteSubspace.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/CompleteSubspace.cpp    2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/CompleteSubspace.cpp       2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx">     // prevent simultaneously BlockDirectory creations from multiple threads. This code ensures
</span><span class="cx">     // that any "forEachAllocator" traversals will only see this allocator after it's initialized
</span><span class="cx">     // enough: it will have 
</span><del>-    auto locker = holdLock(m_space.directoryLock());
</del><ins>+    Locker locker { m_space.directoryLock() };
</ins><span class="cx">     if (Allocator allocator = m_allocatorForSizeStep[index])
</span><span class="cx">         return allocator;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapHeapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/Heap.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/Heap.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/Heap.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -419,7 +419,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool isCollecting;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(*m_threadLock);
</del><ins>+        Locker locker { *m_threadLock };
</ins><span class="cx">         RELEASE_ASSERT(m_lastServedTicket <= m_lastGrantedTicket);
</span><span class="cx">         isCollecting = m_lastServedTicket < m_lastGrantedTicket;
</span><span class="cx">     }
</span><span class="lines">@@ -1237,7 +1237,7 @@
</span><span class="cx"> {
</span><span class="cx">     // Check m_requests since the mutator calls this to poll what's going on.
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(*m_threadLock);
</del><ins>+        Locker locker { *m_threadLock };
</ins><span class="cx">         if (m_requests.isEmpty())
</span><span class="cx">             return false;
</span><span class="cx">     }
</span><span class="lines">@@ -1481,7 +1481,7 @@
</span><span class="cx">     m_scheduler->endCollection();
</span><span class="cx">         
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_markingMutex);
</del><ins>+        Locker locker { m_markingMutex };
</ins><span class="cx">         m_parallelMarkersShouldExit = true;
</span><span class="cx">         m_markingConditionVariable.notifyAll();
</span><span class="cx">     }
</span><span class="lines">@@ -1558,7 +1558,7 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(*m_threadLock);
</del><ins>+        Locker locker { *m_threadLock };
</ins><span class="cx">         m_requests.removeFirst();
</span><span class="cx">         m_lastServedTicket++;
</span><span class="cx">         clearMutatorWaiting();
</span><span class="lines">@@ -1991,7 +1991,7 @@
</span><span class="cx">     
</span><span class="cx">     sanitizeStackForVM(m_vm);
</span><span class="cx">     
</span><del>-    auto locker = holdLock(*m_threadLock);
</del><ins>+    Locker locker { *m_threadLock };
</ins><span class="cx">     if (!m_requests.isEmpty())
</span><span class="cx">         m_threadCondition->notifyOne(locker);
</span><span class="cx">     ParkingLot::unparkAll(&m_worldState);
</span><span class="lines">@@ -2730,7 +2730,7 @@
</span><span class="cx"> {
</span><span class="cx">     SamplingProfiler* samplingProfiler = vm.samplingProfiler();
</span><span class="cx">     if (UNLIKELY(samplingProfiler)) {
</span><del>-        auto locker = holdLock(samplingProfiler->getLock());
</del><ins>+        Locker locker { samplingProfiler->getLock() };
</ins><span class="cx">         samplingProfiler->processUnverifiedStackTraces(locker);
</span><span class="cx">         samplingProfiler->visit(visitor);
</span><span class="cx">         if (Options::logGC() == GCLogging::Verbose)
</span><span class="lines">@@ -3070,7 +3070,7 @@
</span><span class="cx"> 
</span><span class="cx"> void Heap::setBonusVisitorTask(RefPtr<SharedTask<void(SlotVisitor&)>> task)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_markingMutex);
</del><ins>+    Locker locker { m_markingMutex };
</ins><span class="cx">     m_bonusVisitorTask = task;
</span><span class="cx">     m_markingConditionVariable.notifyAll();
</span><span class="cx"> }
</span><span class="lines">@@ -3090,7 +3090,7 @@
</span><span class="cx">     // The constraint solver expects return of this function to imply termination of the task in all
</span><span class="cx">     // threads. This ensures that property.
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_markingMutex);
</del><ins>+        Locker locker { m_markingMutex };
</ins><span class="cx">         while (task->refCount() > initialRefCount)
</span><span class="cx">             m_markingConditionVariable.wait(m_markingMutex);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapHeapSnapshotBuildercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_buildingNodeMutex);
</del><ins>+        Locker locker { m_buildingNodeMutex };
</ins><span class="cx">         m_appendedCells.clear();
</span><span class="cx">         m_snapshot->finalize();
</span><span class="cx">     }
</span><span class="lines">@@ -90,7 +90,7 @@
</span><span class="cx">     if (previousSnapshotHasNodeForCell(cell, identifier))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_buildingNodeMutex);
</del><ins>+    Locker locker { m_buildingNodeMutex };
</ins><span class="cx">     auto addResult = m_appendedCells.add(cell);
</span><span class="cx">     if (!addResult.isNewEntry)
</span><span class="cx">         return;
</span><span class="lines">@@ -106,7 +106,7 @@
</span><span class="cx">     if (from == to)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_buildingEdgeMutex);
</del><ins>+    Locker locker { m_buildingEdgeMutex };
</ins><span class="cx"> 
</span><span class="cx">     if (m_snapshotType == SnapshotType::GCDebuggingSnapshot && !from) {
</span><span class="cx">         if (rootMarkReason == RootMarkReason::None && m_snapshotType == SnapshotType::GCDebuggingSnapshot)
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx">     ASSERT(m_profiler.activeHeapAnalyzer() == this);
</span><span class="cx">     ASSERT(to);
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_buildingEdgeMutex);
</del><ins>+    Locker locker { m_buildingEdgeMutex };
</ins><span class="cx"> 
</span><span class="cx">     m_edges.append(HeapSnapshotEdge(from, to, EdgeType::Property, propertyName));
</span><span class="cx"> }
</span><span class="lines">@@ -135,7 +135,7 @@
</span><span class="cx">     ASSERT(m_profiler.activeHeapAnalyzer() == this);
</span><span class="cx">     ASSERT(to);
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_buildingEdgeMutex);
</del><ins>+    Locker locker { m_buildingEdgeMutex };
</ins><span class="cx"> 
</span><span class="cx">     m_edges.append(HeapSnapshotEdge(from, to, EdgeType::Variable, variableName));
</span><span class="cx"> }
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx">     ASSERT(m_profiler.activeHeapAnalyzer() == this);
</span><span class="cx">     ASSERT(to);
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_buildingEdgeMutex);
</del><ins>+    Locker locker { m_buildingEdgeMutex };
</ins><span class="cx"> 
</span><span class="cx">     m_edges.append(HeapSnapshotEdge(from, to, index));
</span><span class="cx"> }
</span><span class="lines">@@ -155,7 +155,7 @@
</span><span class="cx">     if (!reason || !*reason || m_snapshotType != SnapshotType::GCDebuggingSnapshot)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_buildingEdgeMutex);
</del><ins>+    Locker locker { m_buildingEdgeMutex };
</ins><span class="cx"> 
</span><span class="cx">     m_rootData.ensure(cell, [] () -> RootData {
</span><span class="cx">         return { };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapIsoAlignedMemoryAllocatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> #if ENABLE(MALLOC_HEAP_BREAKDOWN)
</span><span class="cx">     return m_debugHeap.memalign(MarkedBlock::blockSize, MarkedBlock::blockSize, true);
</span><span class="cx"> #else
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     
</span><span class="cx">     m_firstUncommitted = m_committed.findBit(m_firstUncommitted, false);
</span><span class="cx">     if (m_firstUncommitted < m_blocks.size()) {
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx"> #if ENABLE(MALLOC_HEAP_BREAKDOWN)
</span><span class="cx">     m_debugHeap.free(basePtr);
</span><span class="cx"> #else
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     
</span><span class="cx">     auto iter = m_blockIndices.find(basePtr);
</span><span class="cx">     RELEASE_ASSERT(iter != m_blockIndices.end());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapIsoCellSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/IsoCellSet.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/IsoCellSet.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/IsoCellSet.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx">         {
</span><span class="cx">             if (m_done)
</span><span class="cx">                 return nullptr;
</span><del>-            auto locker = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             auto bits = m_directory.m_bits.markingNotEmpty() & m_set.m_blocksWithBits;
</span><span class="cx">             m_index = bits.findBit(m_index, true);
</span><span class="cx">             if (m_index >= m_directory.m_blocks.size()) {
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx"> 
</span><span class="cx"> NEVER_INLINE Bitmap<MarkedBlock::atomsPerBlock>* IsoCellSet::addSlow(unsigned blockIndex)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_subspace.m_directory.m_bitvectorLock);
</del><ins>+    Locker locker { m_subspace.m_directory.m_bitvectorLock };
</ins><span class="cx">     auto& bitsPtrRef = m_bits[blockIndex];
</span><span class="cx">     auto* bits = bitsPtrRef.get();
</span><span class="cx">     if (!bits) {
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx"> void IsoCellSet::didRemoveBlock(unsigned blockIndex)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_subspace.m_directory.m_bitvectorLock);
</del><ins>+        Locker locker { m_subspace.m_directory.m_bitvectorLock };
</ins><span class="cx">         m_blocksWithBits[blockIndex] = false;
</span><span class="cx">     }
</span><span class="cx">     m_bits[blockIndex] = nullptr;
</span><span class="lines">@@ -135,7 +135,7 @@
</span><span class="cx">         {
</span><span class="cx">             // Holding the bitvector lock happens to be enough because that's what we also hold in
</span><span class="cx">             // other places where we manipulate this bitvector.
</span><del>-            auto locker = holdLock(m_subspace.m_directory.m_bitvectorLock);
</del><ins>+            Locker locker { m_subspace.m_directory.m_bitvectorLock };
</ins><span class="cx">             m_blocksWithBits[block->index()] = false;
</span><span class="cx">         }
</span><span class="cx">         m_bits[block->index()] = nullptr;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapIsoCellSetInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/IsoCellSetInlines.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/IsoCellSetInlines.h     2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/IsoCellSetInlines.h        2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             {
</span><del>-                auto locker = holdLock(m_lock);
</del><ins>+                Locker locker { m_lock };
</ins><span class="cx">                 if (!m_needToVisitPreciseAllocations)
</span><span class="cx">                     return;
</span><span class="cx">                 m_needToVisitPreciseAllocations = false;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapIsoSubspacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/IsoSubspace.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/IsoSubspace.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/IsoSubspace.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx">     m_isIsoSubspace = true;
</span><span class="cx">     initialize(heapCellType, m_isoAlignedMemoryAllocator.get());
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_space.directoryLock());
</del><ins>+    Locker locker { m_space.directoryLock() };
</ins><span class="cx">     m_directory.setSubspace(this);
</span><span class="cx">     m_space.addBlockDirectory(locker, &m_directory);
</span><span class="cx">     m_alignedMemoryAllocator->registerDirectory(heap, &m_directory);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapIsoSubspacePerVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/IsoSubspacePerVM.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/IsoSubspacePerVM.cpp    2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/IsoSubspacePerVM.cpp       2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx">     
</span><span class="cx">     ~AutoremovingIsoSubspace() final
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_perVM.m_lock);
</del><ins>+        Locker locker { m_perVM.m_lock };
</ins><span class="cx">         m_perVM.m_subspacePerVM.remove(&space().heap().vm());
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx"> 
</span><span class="cx"> IsoSubspace& IsoSubspacePerVM::forVM(VM& vm)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     auto result = m_subspacePerVM.add(&vm, nullptr);
</span><span class="cx">     if (result.isNewEntry) {
</span><span class="cx">         SubspaceParameters params = m_subspaceParameters(vm);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapLocalAllocatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/LocalAllocator.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/LocalAllocator.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/LocalAllocator.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">     : m_directory(directory)
</span><span class="cx">     , m_freeList(directory->m_cellSize)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(directory->m_localAllocatorsLock);
</del><ins>+    Locker locker { directory->m_localAllocatorsLock };
</ins><span class="cx">     directory->m_localAllocators.append(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx"> LocalAllocator::~LocalAllocator()
</span><span class="cx"> {
</span><span class="cx">     if (isOnList()) {
</span><del>-        auto locker = holdLock(m_directory->m_localAllocatorsLock);
</del><ins>+        Locker locker { m_directory->m_localAllocatorsLock };
</ins><span class="cx">         remove();
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapMachineStackMarkercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/MachineStackMarker.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/MachineStackMarker.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/MachineStackMarker.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx">     // Prevent two VMs from suspending each other's threads at the same time,
</span><span class="cx">     // which can cause deadlock: <rdar://problem/20300842>.
</span><span class="cx">     static Lock suspendLock;
</span><del>-    auto suspendLocker = holdLock(suspendLock);
</del><ins>+    Locker suspendLocker { suspendLock };
</ins><span class="cx"> 
</span><span class="cx">     *size = 0;
</span><span class="cx"> 
</span><span class="lines">@@ -204,7 +204,7 @@
</span><span class="cx">     size_t size;
</span><span class="cx">     size_t capacity = 0;
</span><span class="cx">     void* buffer = nullptr;
</span><del>-    auto locker = holdLock(m_threadGroup->getLock());
</del><ins>+    Locker locker { m_threadGroup->getLock() };
</ins><span class="cx">     while (!tryCopyOtherThreadStacks(locker, buffer, capacity, &size, *currentThread))
</span><span class="cx">         growBuffer(size, &buffer, &capacity);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapMarkedBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/MarkedBlock.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/MarkedBlock.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/MarkedBlock.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx"> 
</span><span class="cx"> void MarkedBlock::Handle::stopAllocating(const FreeList& freeList)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(blockFooter().m_lock);
</del><ins>+    Locker locker { blockFooter().m_lock };
</ins><span class="cx">     
</span><span class="cx">     if (MarkedBlockInternal::verbose)
</span><span class="cx">         dataLog(RawPointer(this), ": MarkedBlock::Handle::stopAllocating!\n");
</span><span class="lines">@@ -173,7 +173,7 @@
</span><span class="cx"> void MarkedBlock::Handle::resumeAllocating(FreeList& freeList)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(blockFooter().m_lock);
</del><ins>+        Locker locker { blockFooter().m_lock };
</ins><span class="cx">         
</span><span class="cx">         if (MarkedBlockInternal::verbose)
</span><span class="cx">             dataLog(RawPointer(this), ": MarkedBlock::Handle::resumeAllocating!\n");
</span><span class="lines">@@ -197,7 +197,7 @@
</span><span class="cx"> void MarkedBlock::aboutToMarkSlow(HeapVersion markingVersion)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(vm().heap.objectSpace().isMarking());
</span><del>-    auto locker = holdLock(footer().m_lock);
</del><ins>+    Locker locker { footer().m_lock };
</ins><span class="cx">     
</span><span class="cx">     if (!areMarksStale(markingVersion))
</span><span class="cx">         return;
</span><span class="lines">@@ -204,7 +204,7 @@
</span><span class="cx">     
</span><span class="cx">     BlockDirectory* directory = handle().directory();
</span><span class="cx"> 
</span><del>-    if (handle().directory()->isAllocated(holdLock(directory->bitvectorLock()), &handle())
</del><ins>+    if (handle().directory()->isAllocated(Locker { directory->bitvectorLock() }, &handle())
</ins><span class="cx">         || !marksConveyLivenessDuringMarking(markingVersion)) {
</span><span class="cx">         if (MarkedBlockInternal::verbose)
</span><span class="cx">             dataLog(RawPointer(this), ": Clearing marks without doing anything else.\n");
</span><span class="lines">@@ -239,7 +239,7 @@
</span><span class="cx">     footer().m_markingVersion = markingVersion;
</span><span class="cx">     
</span><span class="cx">     // This means we're the first ones to mark any object in this block.
</span><del>-    directory->setIsMarkingNotEmpty(holdLock(directory->bitvectorLock()), &handle(), true);
</del><ins>+    directory->setIsMarkingNotEmpty(Locker { directory->bitvectorLock() }, &handle(), true);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void MarkedBlock::resetAllocated()
</span><span class="lines">@@ -285,7 +285,7 @@
</span><span class="cx"> 
</span><span class="cx"> void MarkedBlock::Handle::didConsumeFreeList()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(blockFooter().m_lock);
</del><ins>+    Locker locker { blockFooter().m_lock };
</ins><span class="cx">     if (MarkedBlockInternal::verbose)
</span><span class="cx">         dataLog(RawPointer(this), ": MarkedBlock::Handle::didConsumeFreeList!\n");
</span><span class="cx">     ASSERT(isFreeListed());
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx"> void MarkedBlock::noteMarkedSlow()
</span><span class="cx"> {
</span><span class="cx">     BlockDirectory* directory = handle().directory();
</span><del>-    directory->setIsMarkingRetired(holdLock(directory->bitvectorLock()), &handle(), true);
</del><ins>+    directory->setIsMarkingRetired(Locker { directory->bitvectorLock() }, &handle(), true);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void MarkedBlock::Handle::removeFromDirectory()
</span><span class="lines">@@ -369,7 +369,7 @@
</span><span class="cx"> {
</span><span class="cx">     CommaPrinter comma;
</span><span class="cx">     directory()->forEachBitVectorWithName(
</span><del>-        holdLock(directory()->bitvectorLock()),
</del><ins>+        Locker { directory()->bitvectorLock() },
</ins><span class="cx">         [&](auto vectorRef, const char* name) {
</span><span class="cx">             out.print(comma, name, ":", vectorRef[index()] ? "YES" : "no");
</span><span class="cx">         });
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapMarkedBlockInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/MarkedBlockInlines.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/MarkedBlockInlines.h    2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/MarkedBlockInlines.h       2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    auto locker = holdLock(footer.m_lock);
</del><ins>+    Locker locker { footer.m_lock };
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(!isFreeListed());
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapMarkingConstraintcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/MarkingConstraint.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/MarkingConstraint.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/MarkingConstraint.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx">     if (verboseMarkingConstraint && visitCounter.visitCount())
</span><span class="cx">         dataLog("(", abbreviatedName(), " visited ", visitCounter.visitCount(), " in doParallelWork)");
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         m_lastVisitCount += visitCounter.visitCount();
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapMarkingConstraintSolvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp     2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/MarkingConstraintSolver.cpp        2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -152,7 +152,7 @@
</span><span class="cx"> 
</span><span class="cx"> void MarkingConstraintSolver::addParallelTask(RefPtr<SharedTask<void(SlotVisitor&)>> task, MarkingConstraint& constraint)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     m_toExecuteInParallel.append(TaskWithConstraint(WTFMove(task), &constraint));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx">         unsigned indexToRun = UINT_MAX;
</span><span class="cx">         TaskWithConstraint task;
</span><span class="cx">         {
</span><del>-            auto locker = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">                         
</span><span class="cx">             for (;;) {
</span><span class="cx">                 auto tryParallelWork = [&] () -> bool {
</span><span class="lines">@@ -241,7 +241,7 @@
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         {
</span><del>-            auto locker = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             
</span><span class="cx">             if (doParallelWorkMode) {
</span><span class="cx">                 if (!m_toExecuteInParallel.isEmpty()
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapParallelSourceAdapterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/ParallelSourceAdapter.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/ParallelSourceAdapter.h 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/ParallelSourceAdapter.h    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx">     
</span><span class="cx">     InnerType run() final
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         do {
</span><span class="cx">             if (m_innerSource) {
</span><span class="cx">                 if (InnerType result = m_innerSource->run())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapSlotVisitorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/SlotVisitor.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/SlotVisitor.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/SlotVisitor.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -464,7 +464,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (mutatorIsStoppedIsUpToDate())
</span><span class="cx">         return;
</span><del>-    updateMutatorIsStopped(holdLock(m_rightToRun));
</del><ins>+    updateMutatorIsStopped(Locker { m_rightToRun });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SlotVisitor::hasAcknowledgedThatTheMutatorIsResumed() const
</span><span class="lines">@@ -489,7 +489,7 @@
</span><span class="cx">         RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    auto locker = holdLock(m_rightToRun);
</del><ins>+    Locker locker { m_rightToRun };
</ins><span class="cx">     
</span><span class="cx">     while (!hasElapsed(timeout)) {
</span><span class="cx">         updateMutatorIsStopped(locker);
</span><span class="lines">@@ -521,7 +521,7 @@
</span><span class="cx"> 
</span><span class="cx">     size_t cellsRequested = bytesRequested / MarkedBlock::atomSize;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_heap.m_markingMutex);
</del><ins>+        Locker locker { m_heap.m_markingMutex };
</ins><span class="cx">         forEachMarkStack(
</span><span class="cx">             [&] (MarkStackArray& stack) -> IterationStatus {
</span><span class="cx">                 cellsRequested -= correspondingGlobalStack(stack).transferTo(stack, cellsRequested);
</span><span class="lines">@@ -541,7 +541,7 @@
</span><span class="cx">     };
</span><span class="cx">     
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_rightToRun);
</del><ins>+        Locker locker { m_rightToRun };
</ins><span class="cx">         
</span><span class="cx">         while (!isDone()) {
</span><span class="cx">             updateMutatorIsStopped(locker);
</span><span class="lines">@@ -606,7 +606,7 @@
</span><span class="cx">         RefPtr<SharedTask<void(SlotVisitor&)>> bonusTask;
</span><span class="cx">         
</span><span class="cx">         {
</span><del>-            auto locker = holdLock(m_heap.m_markingMutex);
</del><ins>+            Locker locker { m_heap.m_markingMutex };
</ins><span class="cx">             if (isActive)
</span><span class="cx">                 m_heap.m_numberOfActiveParallelMarkers--;
</span><span class="cx">             m_heap.m_numberOfWaitingParallelMarkers++;
</span><span class="lines">@@ -685,7 +685,7 @@
</span><span class="cx">             // The main thread could still be running, and may run for a while. Unless we clear the task
</span><span class="cx">             // ourselves, we will keep looping around trying to run the task.
</span><span class="cx">             {
</span><del>-                auto locker = holdLock(m_heap.m_markingMutex);
</del><ins>+                Locker locker { m_heap.m_markingMutex };
</ins><span class="cx">                 if (m_heap.m_bonusVisitorTask == bonusTask)
</span><span class="cx">                     m_heap.m_bonusVisitorTask = nullptr;
</span><span class="cx">                 bonusTask = nullptr;
</span><span class="lines">@@ -721,13 +721,13 @@
</span><span class="cx">         return drainInParallel(timeout);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    donateAll(holdLock(m_heap.m_markingMutex));
</del><ins>+    donateAll(Locker { m_heap.m_markingMutex });
</ins><span class="cx">     return waitForTermination(timeout);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> SlotVisitor::SharedDrainResult SlotVisitor::waitForTermination(MonotonicTime timeout)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_heap.m_markingMutex);
</del><ins>+    Locker locker { m_heap.m_markingMutex };
</ins><span class="cx">     for (;;) {
</span><span class="cx">         if (hasElapsed(timeout))
</span><span class="cx">             return SharedDrainResult::TimedOut;
</span><span class="lines">@@ -746,7 +746,7 @@
</span><span class="cx">     if (isEmpty())
</span><span class="cx">         return;
</span><span class="cx">     
</span><del>-    donateAll(holdLock(m_heap.m_markingMutex));
</del><ins>+    donateAll(Locker { m_heap.m_markingMutex });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SlotVisitor::donateAll(const AbstractLocker&)
</span><span class="lines">@@ -783,7 +783,7 @@
</span><span class="cx"> {
</span><span class="cx">     dataLogLnIf(Options::verboseVisitRace(), toCString("GC visit race: ", race));
</span><span class="cx">     
</span><del>-    auto locker = holdLock(heap()->m_raceMarkStackLock);
</del><ins>+    Locker locker { heap()->m_raceMarkStackLock };
</ins><span class="cx">     JSCell* cell = race.cell();
</span><span class="cx">     cell->setCellState(CellState::PossiblyGrey);
</span><span class="cx">     heap()->m_raceMarkStack->append(cell);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapSubspacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/Subspace.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/Subspace.cpp    2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/Subspace.cpp       2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx">         
</span><span class="cx">         BlockDirectory* run() final
</span><span class="cx">         {
</span><del>-            auto locker = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             BlockDirectory* result = m_directory;
</span><span class="cx">             if (result)
</span><span class="cx">                 m_directory = result->nextDirectoryInSubspace();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapSubspaceInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/SubspaceInlines.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/SubspaceInlines.h       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/heap/SubspaceInlines.h  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -108,7 +108,7 @@
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             {
</span><del>-                auto locker = holdLock(m_lock);
</del><ins>+                Locker locker { m_lock };
</ins><span class="cx">                 if (!m_needToVisitPreciseAllocations)
</span><span class="cx">                     return;
</span><span class="cx">                 m_needToVisitPreciseAllocations = false;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -758,7 +758,7 @@
</span><span class="cx">         ASSERT(to);
</span><span class="cx">         ASSERT(to->vm().heapProfiler()->activeHeapAnalyzer() == this);
</span><span class="cx"> 
</span><del>-        auto locker = holdLock(m_mutex);
</del><ins>+        Locker locker { m_mutex };
</ins><span class="cx"> 
</span><span class="cx">         if (from && from != to) {
</span><span class="cx">             m_successors.ensure(from, [] {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitExecutableAllocatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -464,7 +464,7 @@
</span><span class="cx">     RefPtr<ExecutableMemoryHandle> allocate(size_t sizeInBytes)
</span><span class="cx">     {
</span><span class="cx"> #if ENABLE(JUMP_ISLANDS)
</span><del>-        auto locker = holdLock(getLock());
</del><ins>+        Locker locker { getLock() };
</ins><span class="cx"> 
</span><span class="cx">         unsigned start = 0;
</span><span class="cx">         if (Options::useRandomizingExecutableIslandAllocation())
</span><span class="lines">@@ -535,7 +535,7 @@
</span><span class="cx"> 
</span><span class="cx">     MetaAllocator::Statistics currentStatistics()
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(getLock());
</del><ins>+        Locker locker { getLock() };
</ins><span class="cx">         MetaAllocator::Statistics result { 0, 0, 0 };
</span><span class="cx">         forEachAllocator([&] (Allocator& allocator) {
</span><span class="cx">             auto allocatorStats = allocator.currentStatistics(locker);
</span><span class="lines">@@ -581,7 +581,7 @@
</span><span class="cx"> 
</span><span class="cx">     void* makeIsland(uintptr_t jumpLocation, uintptr_t newTarget, bool concurrently)
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(getLock());
</del><ins>+        Locker locker { getLock() };
</ins><span class="cx">         return islandForJumpLocation(locker, jumpLocation, newTarget, concurrently);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejsccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jsc.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jsc.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/jsc.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -1801,7 +1801,7 @@
</span><span class="cx"> Worker::Worker(Workers& workers)
</span><span class="cx">     : m_workers(workers)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_workers.m_lock);
</del><ins>+    Locker locker { m_workers.m_lock };
</ins><span class="cx">     m_workers.m_workers.append(this);
</span><span class="cx">     
</span><span class="cx">     *currentWorker() = this;
</span><span class="lines">@@ -1809,7 +1809,7 @@
</span><span class="cx"> 
</span><span class="cx"> Worker::~Worker()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_workers.m_lock);
</del><ins>+    Locker locker { m_workers.m_lock };
</ins><span class="cx">     RELEASE_ASSERT(isOnList());
</span><span class="cx">     remove();
</span><span class="cx"> }
</span><span class="lines">@@ -1821,7 +1821,7 @@
</span><span class="cx"> 
</span><span class="cx"> RefPtr<Message> Worker::dequeue()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_workers.m_lock);
</del><ins>+    Locker locker { m_workers.m_lock };
</ins><span class="cx">     while (m_messages.isEmpty())
</span><span class="cx">         m_workers.m_condition.wait(m_workers.m_lock);
</span><span class="cx">     return m_messages.takeFirst();
</span><span class="lines">@@ -1856,7 +1856,7 @@
</span><span class="cx"> template<typename Func>
</span><span class="cx"> void Workers::broadcast(const Func& func)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     for (Worker* worker = m_workers.begin(); worker != m_workers.end(); worker = worker->next()) {
</span><span class="cx">         if (worker != &Worker::current())
</span><span class="cx">             func(locker, *worker);
</span><span class="lines">@@ -1866,7 +1866,7 @@
</span><span class="cx"> 
</span><span class="cx"> void Workers::report(const String& string)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     m_reports.append(string.isolatedCopy());
</span><span class="cx">     m_condition.notifyAll();
</span><span class="cx"> }
</span><span class="lines">@@ -1873,7 +1873,7 @@
</span><span class="cx"> 
</span><span class="cx"> String Workers::tryGetReport()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     if (m_reports.isEmpty())
</span><span class="cx">         return String();
</span><span class="cx">     return m_reports.takeFirst();
</span><span class="lines">@@ -1881,7 +1881,7 @@
</span><span class="cx"> 
</span><span class="cx"> String Workers::getReport()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     while (m_reports.isEmpty())
</span><span class="cx">         m_condition.wait(m_lock);
</span><span class="cx">     return m_reports.takeFirst();
</span><span class="lines">@@ -1982,7 +1982,7 @@
</span><span class="cx">                 [&] (VM&, GlobalObject* globalObject, bool& success) {
</span><span class="cx">                     // Notify the thread that started us that we have registered a worker.
</span><span class="cx">                     {
</span><del>-                        auto locker = holdLock(didStartLock);
</del><ins>+                        Locker locker { didStartLock };
</ins><span class="cx">                         didStart = true;
</span><span class="cx">                         didStartCondition.notifyOne();
</span><span class="cx">                     }
</span><span class="lines">@@ -1999,7 +1999,7 @@
</span><span class="cx">         })->detach();
</span><span class="cx">     
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(didStartLock);
</del><ins>+        Locker locker { didStartLock };
</ins><span class="cx">         while (!didStart)
</span><span class="cx">             didStartCondition.wait(didStartLock);
</span><span class="cx">     }
</span><span class="lines">@@ -2389,7 +2389,7 @@
</span><span class="cx">     if (!finalizationRegistry)
</span><span class="cx">         return throwVMTypeError(globalObject, scope, "first argument is not a finalizationRegistry"_s);
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(finalizationRegistry->cellLock());
</del><ins>+    Locker locker { finalizationRegistry->cellLock() };
</ins><span class="cx">     return JSValue::encode(jsNumber(finalizationRegistry->liveCount(locker)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2402,7 +2402,7 @@
</span><span class="cx">     if (!finalizationRegistry)
</span><span class="cx">         return throwVMTypeError(globalObject, scope, "first argument is not a finalizationRegistry"_s);
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(finalizationRegistry->cellLock());
</del><ins>+    Locker locker { finalizationRegistry->cellLock() };
</ins><span class="cx">     return JSValue::encode(jsNumber(finalizationRegistry->deadCount(locker)));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeDeferredWorkTimercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/DeferredWorkTimer.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/DeferredWorkTimer.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/DeferredWorkTimer.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx"> void DeferredWorkTimer::doWork(VM& vm)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(vm.currentThreadIsHoldingAPILock());
</span><del>-    auto locker = holdLock(m_taskLock);
</del><ins>+    Locker locker { m_taskLock };
</ins><span class="cx">     cancelTimer();
</span><span class="cx">     if (!m_runTasks)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeErrorInstancecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ErrorInstance.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ErrorInstance.cpp    2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/ErrorInstance.cpp       2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr<Vector<StackFrame>> stackTrace = getStackTrace(globalObject, vm, this, useCurrentFrame);
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(cellLock());
</del><ins>+        Locker locker { cellLock() };
</ins><span class="cx">         m_stackTrace = WTFMove(stackTrace);
</span><span class="cx">     }
</span><span class="cx">     vm.heap.writeBarrier(this);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeEvalExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/EvalExecutable.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/EvalExecutable.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/EvalExecutable.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx">     visitor.append(thisObject->m_unlinkedEvalCodeBlock);
</span><span class="cx">     visitor.append(thisObject->m_evalCodeBlock);
</span><span class="cx">     if (TemplateObjectMap* map = thisObject->m_templateObjectMap.get()) {
</span><del>-        auto locker = holdLock(thisObject->cellLock());
</del><ins>+        Locker locker { thisObject->cellLock() };
</ins><span class="cx">         for (auto& entry : *map)
</span><span class="cx">             visitor.append(entry.value);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFileBasedFuzzerAgentBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx"> 
</span><span class="cx"> SpeculatedType FileBasedFuzzerAgentBase::getPrediction(CodeBlock* codeBlock, const CodeOrigin& codeOrigin, SpeculatedType original)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx"> 
</span><span class="cx">     ScriptExecutable* ownerExecutable = codeBlock->ownerExecutable();
</span><span class="cx">     const auto& sourceURL = ownerExecutable->sourceURL();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeFunctionExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/FunctionExecutable.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/FunctionExecutable.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/FunctionExecutable.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">     if (RareData* rareData = thisObject->m_rareData.get()) {
</span><span class="cx">         visitor.append(rareData->m_cachedPolyProtoStructure);
</span><span class="cx">         if (TemplateObjectMap* map = rareData->m_templateObjectMap.get()) {
</span><del>-            auto locker = holdLock(thisObject->cellLock());
</del><ins>+            Locker locker { thisObject->cellLock() };
</ins><span class="cx">             for (auto& entry : *map)
</span><span class="cx">                 visitor.append(entry.value);
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSArraycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSArray.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSArray.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSArray.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -793,7 +793,7 @@
</span><span class="cx">         return true;
</span><span class="cx">     
</span><span class="cx">     DisallowGC disallowGC;
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     
</span><span class="cx">     if (startIndex + count > vectorLength)
</span><span class="cx">         count = vectorLength - startIndex;
</span><span class="lines">@@ -981,7 +981,7 @@
</span><span class="cx">     // Need to have GC deferred around the unshiftCountSlowCase(), since that leaves the butterfly in
</span><span class="cx">     // a weird state: some parts of it will be left uninitialized, which we will fill in here.
</span><span class="cx">     DeferGC deferGC(vm.heap);
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     
</span><span class="cx">     if (moveFront && storage->m_indexBias >= count) {
</span><span class="cx">         // When moving Butterfly's head to adjust property-storage, we must take a structure lock.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSArrayBufferViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSArrayBufferView.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSArrayBufferView.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSArrayBufferView.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -225,7 +225,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSArrayBufferView::detach()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     RELEASE_ASSERT(hasArrayBuffer());
</span><span class="cx">     RELEASE_ASSERT(!isShared());
</span><span class="cx">     m_length = 0;
</span><span class="lines">@@ -309,7 +309,7 @@
</span><span class="cx">         structure->outOfLineCapacity(), false, 0, 0));
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(cellLock());
</del><ins>+        Locker locker { cellLock() };
</ins><span class="cx">         butterfly()->indexingHeader()->setArrayBuffer(buffer.get());
</span><span class="cx">         m_vector.setWithoutBarrier(buffer->data(), m_length);
</span><span class="cx">         WTF::storeStoreFence();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSCellh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSCell.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSCell.h     2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSCell.h        2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx"> 
</span><span class="cx">     // We use this abstraction to make it easier to grep for places where we lock cells.
</span><span class="cx">     // to lock a cell you can just do:
</span><del>-    // auto locker = holdLock(cell->cellLocker());
</del><ins>+    // Locker locker { cell->cellLocker() };
</ins><span class="cx">     JSCellLock& cellLock() { return *reinterpret_cast<JSCellLock*>(this); }
</span><span class="cx">     
</span><span class="cx">     JSType type() const;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSFinalizationRegistrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSFinalizationRegistry.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSFinalizationRegistry.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSFinalizationRegistry.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto* thisObject = jsCast<JSFinalizationRegistry*>(cell);
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(thisObject->cellLock());
</del><ins>+    Locker locker { thisObject->cellLock() };
</ins><span class="cx">     for (const auto& iter : thisObject->m_liveRegistrations) {
</span><span class="cx">         for (auto& registration : iter.value)
</span><span class="cx">             visitor.append(registration.holdings);
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSFinalizationRegistry::finalizeUnconditionally(VM& vm)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx"> 
</span><span class="cx"> #if ASSERT_ENABLED
</span><span class="cx">     for (const auto& iter : m_deadRegistrations)
</span><span class="lines">@@ -174,7 +174,7 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue JSFinalizationRegistry::takeDeadHoldingsValue()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     JSValue result;
</span><span class="cx">     if (m_noUnregistrationDead.size())
</span><span class="cx">         result = m_noUnregistrationDead.takeLast().get();
</span><span class="lines">@@ -198,7 +198,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSFinalizationRegistry::registerTarget(VM& vm, JSObject* target, JSValue holdings, JSValue token)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     Registration registration;
</span><span class="cx">     registration.target = target;
</span><span class="cx">     registration.holdings.setWithoutWriteBarrier(holdings);
</span><span class="lines">@@ -214,7 +214,7 @@
</span><span class="cx"> bool JSFinalizationRegistry::unregister(VM&, JSObject* token)
</span><span class="cx"> {
</span><span class="cx">     // We don't need to write barrier ourselves here because we will only point to less things after this finishes.
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     bool result = m_liveRegistrations.remove(token);
</span><span class="cx">     result |= m_deadRegistrations.remove(token);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGenericTypedArrayViewInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h     2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h        2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -534,7 +534,7 @@
</span><span class="cx">     size_t byteSize;
</span><span class="cx">     
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(thisObject->cellLock());
</del><ins>+        Locker locker { thisObject->cellLock() };
</ins><span class="cx">         mode = thisObject->m_mode;
</span><span class="cx">         vector = thisObject->vector();
</span><span class="cx">         byteSize = thisObject->byteSize();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -383,7 +383,7 @@
</span><span class="cx">         profiler = &globalObject->vm().ensureSamplingProfiler(Stopwatch::create());
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(profiler->getLock());
</del><ins>+        Locker locker { profiler->getLock() };
</ins><span class="cx">         profiler->pause(locker);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSModuleNamespaceObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">     m_moduleRecord.set(vm, this, moduleRecord);
</span><span class="cx">     m_names = FixedVector<Identifier>(resolutions.size());
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(cellLock());
</del><ins>+        Locker locker { cellLock() };
</ins><span class="cx">         unsigned index = 0;
</span><span class="cx">         for (const auto& pair : resolutions) {
</span><span class="cx">             m_names[index] = pair.first;
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx">     Base::visitChildren(thisObject, visitor);
</span><span class="cx">     visitor.append(thisObject->m_moduleRecord);
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(thisObject->cellLock());
</del><ins>+        Locker locker { thisObject->cellLock() };
</ins><span class="cx">         for (auto& pair : thisObject->m_exports)
</span><span class="cx">             visitor.appendHidden(pair.value.moduleRecord);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -384,7 +384,7 @@
</span><span class="cx">         // butterfly with contiguous shape for new array storage butterfly. When converting the butterfly
</span><span class="cx">         // with contiguous shape to array storage, we always allocate a new one. Holding this lock for contiguous
</span><span class="cx">         // butterflies is unnecessary since contiguous shaped butterfly never becomes broken state.
</span><del>-        locker = holdLock(cellLock());
</del><ins>+        locker = Locker { cellLock() };
</ins><span class="cx">         break;
</span><span class="cx">     default:
</span><span class="cx">         break;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSRunLoopTimercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSRunLoopTimer.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">     Vector<Ref<JSRunLoopTimer>> timersToFire;
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         RunLoop* currentRunLoop = &RunLoop::current();
</span><span class="cx">         EpochTime nowEpochTime = epochTime(0_s);
</span><span class="cx">         for (auto& entry : m_mapping) {
</span><span class="lines">@@ -120,7 +120,7 @@
</span><span class="cx"> {
</span><span class="cx">     auto data = makeUnique<PerVMData>(*this, vm.runLoop());
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     auto addResult = m_mapping.add({ vm.apiLock() }, WTFMove(data));
</span><span class="cx">     RELEASE_ASSERT(addResult.isNewEntry);
</span><span class="cx"> }
</span><span class="lines">@@ -127,7 +127,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSRunLoopTimer::Manager::unregisterVM(VM& vm)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx"> 
</span><span class="cx">     auto iter = m_mapping.find({ vm.apiLock() });
</span><span class="cx">     RELEASE_ASSERT(iter != m_mapping.end());
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx"> {
</span><span class="cx">     EpochTime fireEpochTime = epochTime(delay);
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     auto iter = m_mapping.find(timer.m_apiLock);
</span><span class="cx">     RELEASE_ASSERT(iter != m_mapping.end()); // We don't allow calling this after the VM dies.
</span><span class="cx"> 
</span><span class="lines">@@ -161,7 +161,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSRunLoopTimer::Manager::cancelTimer(JSRunLoopTimer& timer)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     auto iter = m_mapping.find(timer.m_apiLock);
</span><span class="cx">     if (iter == m_mapping.end()) {
</span><span class="cx">         // It's trivial to allow this to be called after the VM dies, so we allow for it.
</span><span class="lines">@@ -192,7 +192,7 @@
</span><span class="cx"> 
</span><span class="cx"> Optional<Seconds> JSRunLoopTimer::Manager::timeUntilFire(JSRunLoopTimer& timer)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     auto iter = m_mapping.find(timer.m_apiLock);
</span><span class="cx">     RELEASE_ASSERT(iter != m_mapping.end()); // We only allow this to be called with a live VM.
</span><span class="cx"> 
</span><span class="lines">@@ -212,7 +212,7 @@
</span><span class="cx">     NO_TAIL_CALLS();
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         if (!m_isScheduled) {
</span><span class="cx">             // We raced between this callback being called and cancel() being called.
</span><span class="cx">             // That's fine, we just don't do anything here.
</span><span class="lines">@@ -220,7 +220,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_apiLock.get());
</del><ins>+    Locker locker { m_apiLock.get() };
</ins><span class="cx">     RefPtr<VM> vm = m_apiLock->vm();
</span><span class="cx">     if (!vm) {
</span><span class="cx">         // The VM has been destroyed, so we should just give up.
</span><span class="lines">@@ -247,12 +247,12 @@
</span><span class="cx"> void JSRunLoopTimer::setTimeUntilFire(Seconds intervalInSeconds)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         m_isScheduled = true;
</span><span class="cx">         Manager::shared().scheduleTimer(*this, intervalInSeconds);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_timerCallbacksLock);
</del><ins>+    Locker locker { m_timerCallbacksLock };
</ins><span class="cx">     for (auto& task : m_timerSetCallbacks)
</span><span class="cx">         task->run();
</span><span class="cx"> }
</span><span class="lines">@@ -259,7 +259,7 @@
</span><span class="cx"> 
</span><span class="cx"> void JSRunLoopTimer::cancelTimer()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     m_isScheduled = false;
</span><span class="cx">     Manager::shared().cancelTimer(*this);
</span><span class="cx"> }
</span><span class="lines">@@ -266,13 +266,13 @@
</span><span class="cx"> 
</span><span class="cx"> void JSRunLoopTimer::addTimerSetNotification(TimerNotificationCallback callback)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_timerCallbacksLock);
</del><ins>+    Locker locker { m_timerCallbacksLock };
</ins><span class="cx">     m_timerSetCallbacks.add(callback);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSRunLoopTimer::removeTimerSetNotification(TimerNotificationCallback callback)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_timerCallbacksLock);
</del><ins>+    Locker locker { m_timerCallbacksLock };
</ins><span class="cx">     m_timerSetCallbacks.remove(callback);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSSegmentedVariableObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> 
</span><span class="cx"> ScopeOffset JSSegmentedVariableObject::findVariableIndex(void* variableAddress)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     
</span><span class="cx">     for (unsigned i = m_variables.size(); i--;) {
</span><span class="cx">         if (&m_variables[i] != variableAddress)
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx"> 
</span><span class="cx"> ScopeOffset JSSegmentedVariableObject::addVariables(unsigned numberOfVariablesToAdd, JSValue initialValue)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     
</span><span class="cx">     size_t oldSize = m_variables.size();
</span><span class="cx">     m_variables.grow(oldSize + numberOfVariablesToAdd);
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">     
</span><span class="cx">     // FIXME: We could avoid locking here if SegmentedVector was lock-free. It could be made lock-free
</span><span class="cx">     // relatively easily.
</span><del>-    auto locker = holdLock(thisObject->cellLock());
</del><ins>+    Locker locker { thisObject->cellLock() };
</ins><span class="cx">     for (unsigned i = thisObject->m_variables.size(); i--;)
</span><span class="cx">         visitor.appendHidden(thisObject->m_variables[i]);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeModuleProgramExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/ModuleProgramExecutable.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -89,7 +89,7 @@
</span><span class="cx">     visitor.append(thisObject->m_moduleEnvironmentSymbolTable);
</span><span class="cx">     visitor.append(thisObject->m_moduleProgramCodeBlock);
</span><span class="cx">     if (TemplateObjectMap* map = thisObject->m_templateObjectMap.get()) {
</span><del>-        auto locker = holdLock(thisObject->cellLock());
</del><ins>+        Locker locker { thisObject->cellLock() };
</ins><span class="cx">         for (auto& entry : *map)
</span><span class="cx">             visitor.append(entry.value);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNarrowingNumberPredictionFuzzerAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NarrowingNumberPredictionFuzzerAgent.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NarrowingNumberPredictionFuzzerAgent.cpp     2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/NarrowingNumberPredictionFuzzerAgent.cpp        2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> 
</span><span class="cx"> SpeculatedType NarrowingNumberPredictionFuzzerAgent::getPrediction(CodeBlock* codeBlock, const CodeOrigin& codeOrigin, SpeculatedType original)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx"> 
</span><span class="cx">     if (!(original && speculationChecked(original, SpecBytecodeNumber)))
</span><span class="cx">         return original;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeProgramExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ProgramExecutable.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ProgramExecutable.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/ProgramExecutable.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -219,7 +219,7 @@
</span><span class="cx">     visitor.append(thisObject->m_unlinkedProgramCodeBlock);
</span><span class="cx">     visitor.append(thisObject->m_programCodeBlock);
</span><span class="cx">     if (TemplateObjectMap* map = thisObject->m_templateObjectMap.get()) {
</span><del>-        auto locker = holdLock(thisObject->cellLock());
</del><ins>+        Locker locker { thisObject->cellLock() };
</ins><span class="cx">         for (auto& entry : *map)
</span><span class="cx">             visitor.append(entry.value);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRandomizingFuzzerAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RandomizingFuzzerAgent.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RandomizingFuzzerAgent.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/RandomizingFuzzerAgent.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> 
</span><span class="cx"> SpeculatedType RandomizingFuzzerAgent::getPrediction(CodeBlock* codeBlock, const CodeOrigin& codeOrigin, SpeculatedType original)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     uint32_t high = m_random.getUint32();
</span><span class="cx">     uint32_t low = m_random.getUint32();
</span><span class="cx">     SpeculatedType generated = static_cast<SpeculatedType>((static_cast<uint64_t>(high) << 32) | low) & SpecFullTop;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExp.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExp.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/RegExp.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -242,7 +242,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RegExp::compile(VM* vm, Yarr::YarrCharSize charSize)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     
</span><span class="cx">     Yarr::YarrPattern pattern(m_patternString, m_flags, m_constructionErrorCode);
</span><span class="cx">     if (hasError(m_constructionErrorCode)) {
</span><span class="lines">@@ -293,7 +293,7 @@
</span><span class="cx"> bool RegExp::matchConcurrently(
</span><span class="cx">     VM& vm, const String& s, unsigned startOffset, int& position, Vector<int>& ovector)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx"> 
</span><span class="cx">     if (!hasCodeFor(s.is8Bit() ? Yarr::Char8 : Yarr::Char16))
</span><span class="cx">         return false;
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RegExp::compileMatchOnly(VM* vm, Yarr::YarrCharSize charSize)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     
</span><span class="cx">     Yarr::YarrPattern pattern(m_patternString, m_flags, m_constructionErrorCode);
</span><span class="cx">     if (hasError(m_constructionErrorCode)) {
</span><span class="lines">@@ -356,7 +356,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool RegExp::matchConcurrently(VM& vm, const String& s, unsigned startOffset, MatchResult& result)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx"> 
</span><span class="cx">     if (!hasMatchOnlyCodeFor(s.is8Bit() ? Yarr::Char8 : Yarr::Char16))
</span><span class="cx">         return false;
</span><span class="lines">@@ -367,7 +367,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RegExp::deleteCode()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     
</span><span class="cx">     if (!hasCode())
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSamplingProfilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -350,13 +350,13 @@
</span><span class="cx">     if (m_vm.entryScope) {
</span><span class="cx">         Seconds nowTime = m_stopwatch->elapsedTime();
</span><span class="cx"> 
</span><del>-        auto machineThreadsLocker = holdLock(m_vm.heap.machineThreads().getLock());
-        auto codeBlockSetLocker = holdLock(m_vm.heap.codeBlockSet().getLock());
-        auto executableAllocatorLocker = holdLock(ExecutableAllocator::singleton().getLock());
</del><ins>+        Locker machineThreadsLocker { m_vm.heap.machineThreads().getLock() };
+        Locker codeBlockSetLocker { m_vm.heap.codeBlockSet().getLock() };
+        Locker executableAllocatorLocker { ExecutableAllocator::singleton().getLock() };
</ins><span class="cx">         Optional<LockHolder> wasmCalleesLocker;
</span><span class="cx"> #if ENABLE(WEBASSEMBLY)
</span><span class="cx">         if (Wasm::isSupported())
</span><del>-            wasmCalleesLocker = holdLock(Wasm::CalleeRegistry::singleton().getLock());
</del><ins>+            wasmCalleesLocker = Locker { Wasm::CalleeRegistry::singleton().getLock() };
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">         auto didSuspend = m_jscExecutionThread->suspend();
</span><span class="lines">@@ -951,7 +951,7 @@
</span><span class="cx"> String SamplingProfiler::stackTracesAsJSON()
</span><span class="cx"> {
</span><span class="cx">     DeferGC deferGC(m_vm.heap);
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx"> 
</span><span class="cx">     {
</span><span class="cx">         HeapIterationScope heapIterationScope(m_vm.heap);
</span><span class="lines">@@ -1027,7 +1027,7 @@
</span><span class="cx"> 
</span><span class="cx"> void SamplingProfiler::reportTopFunctions(PrintStream& out)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     DeferGCForAWhile deferGC(m_vm.heap);
</span><span class="cx"> 
</span><span class="cx">     {
</span><span class="lines">@@ -1088,7 +1088,7 @@
</span><span class="cx"> 
</span><span class="cx"> void SamplingProfiler::reportTopBytecodes(PrintStream& out)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     DeferGCForAWhile deferGC(m_vm.heap);
</span><span class="cx"> 
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeScriptExecutablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/ScriptExecutable.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -455,7 +455,7 @@
</span><span class="cx">     TemplateObjectMap& templateObjectMap = ensureTemplateObjectMap(vm);
</span><span class="cx">     TemplateObjectMap::AddResult result;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(cellLock());
</del><ins>+        Locker locker { cellLock() };
</ins><span class="cx">         result = templateObjectMap.add(descriptor->endOffset(), WriteBarrier<JSArray>());
</span><span class="cx">     }
</span><span class="cx">     if (JSArray* array = result.iterator->value.get())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSparseArrayValueMapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/SparseArrayValueMap.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">     AddResult result;
</span><span class="cx">     size_t increasedCapacity = 0;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(cellLock());
</del><ins>+        Locker locker { cellLock() };
</ins><span class="cx">         result = m_map.add(i, SparseArrayEntry());
</span><span class="cx">         size_t capacity = m_map.capacity();
</span><span class="cx">         if (capacity > m_reportedCapacity) {
</span><span class="lines">@@ -84,13 +84,13 @@
</span><span class="cx"> 
</span><span class="cx"> void SparseArrayValueMap::remove(iterator it)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     m_map.remove(it);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SparseArrayValueMap::remove(unsigned i)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     m_map.remove(i);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue SparseArrayValueMap::getConcurrently(unsigned i)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx">     auto iterator = m_map.find(i);
</span><span class="cx">     if (iterator == m_map.end())
</span><span class="cx">         return JSValue();
</span><span class="lines">@@ -217,7 +217,7 @@
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><span class="cx">     Base::visitChildren(cell, visitor);
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(thisObject->cellLock());
</del><ins>+        Locker locker { thisObject->cellLock() };
</ins><span class="cx">         for (auto& entry : thisObject->m_map)
</span><span class="cx">             visitor.append(entry.value.asValue());
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStructurecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Structure.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Structure.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/Structure.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -710,7 +710,7 @@
</span><span class="cx">     transition->m_prototype.set(vm, transition, prototype);
</span><span class="cx"> 
</span><span class="cx">     PropertyTable* table = structure->copyPropertyTableForPinning(vm);
</span><del>-    transition->pin(holdLock(transition->m_lock), vm, table);
</del><ins>+    transition->pin(Locker { transition->m_lock }, vm, table);
</ins><span class="cx">     transition->setMaxOffset(vm, structure->maxOffset());
</span><span class="cx">     
</span><span class="cx">     transition->checkOffsetConsistency();
</span><span class="lines">@@ -802,7 +802,7 @@
</span><span class="cx">     Structure* transition = create(vm, structure, deferred);
</span><span class="cx"> 
</span><span class="cx">     PropertyTable* table = structure->copyPropertyTableForPinning(vm);
</span><del>-    transition->pin(holdLock(transition->m_lock), vm, table);
</del><ins>+    transition->pin(Locker { transition->m_lock }, vm, table);
</ins><span class="cx">     transition->setMaxOffset(vm, structure->maxOffset());
</span><span class="cx">     transition->setDictionaryKind(kind);
</span><span class="cx">     transition->setHasBeenDictionary(true);
</span><span class="lines">@@ -879,7 +879,7 @@
</span><span class="cx">         // table doesn't know how to take into account such wholesale edits.
</span><span class="cx"> 
</span><span class="cx">         PropertyTable* table = structure->copyPropertyTableForPinning(vm);
</span><del>-        transition->pinForCaching(holdLock(transition->m_lock), vm, table);
</del><ins>+        transition->pinForCaching(Locker { transition->m_lock }, vm, table);
</ins><span class="cx">         transition->setMaxOffset(vm, structure->maxOffset());
</span><span class="cx">         
</span><span class="cx">         table = transition->propertyTableOrNull();
</span><span class="lines">@@ -902,9 +902,9 @@
</span><span class="cx">     
</span><span class="cx">     if (structure->isDictionary()) {
</span><span class="cx">         PropertyTable* table = transition->ensurePropertyTable(vm);
</span><del>-        transition->pin(holdLock(transition->m_lock), vm, table);
</del><ins>+        transition->pin(Locker { transition->m_lock }, vm, table);
</ins><span class="cx">     } else {
</span><del>-        auto locker = holdLock(structure->m_lock);
</del><ins>+        Locker locker { structure->m_lock };
</ins><span class="cx">         structure->m_transitionTable.add(vm, transition);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1543,9 +1543,9 @@
</span><span class="cx"> 
</span><span class="cx">     if (structure->isDictionary()) {
</span><span class="cx">         PropertyTable* table = transition->ensurePropertyTable(vm);
</span><del>-        transition->pin(holdLock(transition->m_lock), vm, table);
</del><ins>+        transition->pin(Locker { transition->m_lock }, vm, table);
</ins><span class="cx">     } else {
</span><del>-        auto locker = holdLock(structure->m_lock);
</del><ins>+        Locker locker { structure->m_lock };
</ins><span class="cx">         structure->m_transitionTable.add(vm, transition);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStructureCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/StructureCache.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/StructureCache.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/StructureCache.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">         structure = Structure::create(
</span><span class="cx">             vm, globalObject, prototype, typeInfo, classInfo, indexingType, inlineCapacity);
</span><span class="cx">     }
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     m_structures.set(key, structure);
</span><span class="cx">     return structure;
</span><span class="cx"> }
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">     RELEASE_ASSERT(!!prototype); // We use nullptr inside the HashMap for prototype to mean poly proto, so user's of this API must provide non-null prototypes.
</span><span class="cx">     
</span><span class="cx">     PrototypeKey key { prototype, nullptr, inlineCapacity, JSFinalObject::info(), globalObject };
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     if (Structure* structure = m_structures.get(key)) {
</span><span class="cx">         ASSERT(prototype->mayBePrototype());
</span><span class="cx">         return structure;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/VM.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -585,12 +585,12 @@
</span><span class="cx"> 
</span><span class="cx"> void waitForVMDestruction()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(s_destructionLock.write());
</del><ins>+    Locker locker { s_destructionLock.write() };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> VM::~VM()
</span><span class="cx"> {
</span><del>-    auto destructionLocker = holdLock(s_destructionLock.read());
</del><ins>+    Locker destructionLocker { s_destructionLock.read() };
</ins><span class="cx">     
</span><span class="cx">     Gigacage::removePrimitiveDisableCallback(primitiveGigacageDisabledCallback, this);
</span><span class="cx">     deferredWorkTimer->stopRunningTasks();
</span><span class="lines">@@ -1129,7 +1129,7 @@
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx"> void VM::gatherScratchBufferRoots(ConservativeRoots& conservativeRoots)
</span><span class="cx"> {
</span><del>-    auto lock = holdLock(m_scratchBufferLock);
</del><ins>+    Locker locker { m_scratchBufferLock };
</ins><span class="cx">     for (auto* scratchBuffer : m_scratchBuffers) {
</span><span class="cx">         if (scratchBuffer->activeLength()) {
</span><span class="cx">             void* bufferStart = scratchBuffer->dataBuffer();
</span><span class="lines">@@ -1493,7 +1493,7 @@
</span><span class="cx">     if (!size)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_scratchBufferLock);
</del><ins>+    Locker locker { m_scratchBufferLock };
</ins><span class="cx"> 
</span><span class="cx">     if (size > m_sizeOfLastScratchBuffer) {
</span><span class="cx">         // Protect against a N^2 memory usage pathology by ensuring
</span><span class="lines">@@ -1513,7 +1513,7 @@
</span><span class="cx"> 
</span><span class="cx"> void VM::clearScratchBuffers()
</span><span class="cx"> {
</span><del>-    auto lock = holdLock(m_scratchBufferLock);
</del><ins>+    Locker locker { m_scratchBufferLock };
</ins><span class="cx">     for (auto* scratchBuffer : m_scratchBuffers)
</span><span class="cx">         scratchBuffer->setActiveLength(0);
</span><span class="cx"> }
</span><span class="lines">@@ -1687,7 +1687,7 @@
</span><span class="cx"> 
</span><span class="cx"> void VM::addLoopHintExecutionCounter(const Instruction* instruction)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_loopHintExecutionCountLock);
</del><ins>+    Locker locker { m_loopHintExecutionCountLock };
</ins><span class="cx">     auto addResult = m_loopHintExecutionCounts.add(instruction, std::pair<unsigned, std::unique_ptr<uint64_t>>(0, nullptr));
</span><span class="cx">     if (addResult.isNewEntry) {
</span><span class="cx">         auto ptr = WTF::makeUniqueWithoutFastMallocCheck<uint64_t>();
</span><span class="lines">@@ -1699,7 +1699,7 @@
</span><span class="cx"> 
</span><span class="cx"> uint64_t* VM::getLoopHintExecutionCounter(const Instruction* instruction)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_loopHintExecutionCountLock);
</del><ins>+    Locker locker { m_loopHintExecutionCountLock };
</ins><span class="cx">     auto iter = m_loopHintExecutionCounts.find(instruction);
</span><span class="cx">     return iter->value.second.get();
</span><span class="cx"> }
</span><span class="lines">@@ -1706,7 +1706,7 @@
</span><span class="cx"> 
</span><span class="cx"> void VM::removeLoopHintExecutionCounter(const Instruction* instruction)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_loopHintExecutionCountLock);
</del><ins>+    Locker locker { m_loopHintExecutionCountLock };
</ins><span class="cx">     auto iter = m_loopHintExecutionCounts.find(instruction);
</span><span class="cx">     RELEASE_ASSERT(!!iter->value.first);
</span><span class="cx">     --iter->value.first;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMTrapscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VMTraps.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VMTraps.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/VMTraps.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx"> 
</span><span class="cx">     CallFrame* callFrame = reinterpret_cast<CallFrame*>(context.framePointer);
</span><span class="cx"> 
</span><del>-    auto codeBlockSetLocker = holdLock(vm.heap.codeBlockSet().getLock());
</del><ins>+    Locker codeBlockSetLocker { vm.heap.codeBlockSet().getLock() };
</ins><span class="cx"> 
</span><span class="cx">     CodeBlock* foundCodeBlock = nullptr;
</span><span class="cx">     EntryFrame* entryFrame = vm.topEntryFrame;
</span><span class="lines">@@ -159,7 +159,7 @@
</span><span class="cx"> 
</span><span class="cx"> void VMTraps::invalidateCodeBlocksOnStack(CallFrame* topCallFrame)
</span><span class="cx"> {
</span><del>-    auto codeBlockSetLocker = holdLock(vm().heap.codeBlockSet().getLock());
</del><ins>+    Locker codeBlockSetLocker { vm().heap.codeBlockSet().getLock() };
</ins><span class="cx">     invalidateCodeBlocksOnStack(codeBlockSetLocker, topCallFrame);
</span><span class="cx"> }
</span><span class="cx">     
</span><span class="lines">@@ -217,7 +217,7 @@
</span><span class="cx">                 VM& vm = currentCodeBlock->vm();
</span><span class="cx"> 
</span><span class="cx">                 // We are in JIT code so it's safe to acquire this lock.
</span><del>-                auto codeBlockSetLocker = holdLock(vm.heap.codeBlockSet().getLock());
</del><ins>+                Locker codeBlockSetLocker { vm.heap.codeBlockSet().getLock() };
</ins><span class="cx">                 bool sawCurrentCodeBlock = false;
</span><span class="cx">                 vm.heap.forEachCodeBlockIgnoringJITPlans(codeBlockSetLocker, [&] (CodeBlock* codeBlock) {
</span><span class="cx">                     // We want to jettison all code blocks that have vm traps breakpoints, otherwise we could hit them later.
</span><span class="lines">@@ -279,7 +279,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         {
</span><del>-            auto locker = holdLock(*traps().m_lock);
</del><ins>+            Locker locker { *traps().m_lock };
</ins><span class="cx">             if (traps().m_isShuttingDown)
</span><span class="cx">                 return WorkResult::Stop;
</span><span class="cx">             traps().m_condition->waitFor(*traps().m_lock, 1_ms);
</span><span class="lines">@@ -308,7 +308,7 @@
</span><span class="cx"> #if ENABLE(SIGNAL_BASED_VM_TRAPS)
</span><span class="cx">     if (m_signalSender) {
</span><span class="cx">         {
</span><del>-            auto locker = holdLock(*m_lock);
</del><ins>+            Locker locker { *m_lock };
</ins><span class="cx">             if (!m_signalSender->tryStop(locker))
</span><span class="cx">                 m_condition->notifyAll(locker);
</span><span class="cx">         }
</span><span class="lines">@@ -323,7 +323,7 @@
</span><span class="cx">     ASSERT(!vm().currentThreadIsHoldingAPILock());
</span><span class="cx">     ASSERT(onlyContainsAsyncEvents(event));
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(*m_lock);
</del><ins>+        Locker locker { *m_lock };
</ins><span class="cx">         ASSERT(!m_isShuttingDown);
</span><span class="cx">         setTrapBit(event);
</span><span class="cx">         m_needToInvalidatedCodeBlocks = true;
</span><span class="lines">@@ -334,7 +334,7 @@
</span><span class="cx">         // sendSignal() can loop until it has confirmation that the mutator thread
</span><span class="cx">         // has received the trap request. We'll call it from another thread so that
</span><span class="cx">         // fireTrap() does not block.
</span><del>-        auto locker = holdLock(*m_lock);
</del><ins>+        Locker locker { *m_lock };
</ins><span class="cx">         if (!m_signalSender)
</span><span class="cx">             m_signalSender = adoptRef(new SignalSender(locker, vm()));
</span><span class="cx">         m_condition->notifyAll(locker);
</span><span class="lines">@@ -353,7 +353,7 @@
</span><span class="cx">         mask &= ~NeedTermination;
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        auto codeBlockSetLocker = holdLock(vm.heap.codeBlockSet().getLock());
</del><ins>+        Locker codeBlockSetLocker { vm.heap.codeBlockSet().getLock() };
</ins><span class="cx">         vm.heap.forEachCodeBlockIgnoringJITPlans(codeBlockSetLocker, [&] (CodeBlock* codeBlock) {
</span><span class="cx">             // We want to jettison all code blocks that have vm traps breakpoints, otherwise we could hit them later.
</span><span class="cx">             if (codeBlock->hasInstalledVMTrapBreakpoints())
</span><span class="lines">@@ -397,7 +397,7 @@
</span><span class="cx"> 
</span><span class="cx"> auto VMTraps::takeTopPriorityTrap(VMTraps::BitField mask) -> Event
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(*m_lock);
</del><ins>+    Locker locker { *m_lock };
</ins><span class="cx"> 
</span><span class="cx">     // Note: the EventBitShift is already sorted in highest to lowest priority
</span><span class="cx">     // i.e. a bit shift of 0 is highest priority, etc.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeWeakMapImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/WeakMapImpl.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/WeakMapImpl.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/WeakMapImpl.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">     static_assert(std::is_same<BucketType, WeakMapBucket<WeakMapBucketDataKeyValue>>::value);
</span><span class="cx"> 
</span><span class="cx">     auto* thisObject = jsCast<WeakMapImpl*>(cell);
</span><del>-    auto locker = holdLock(thisObject->cellLock());
</del><ins>+    Locker locker { thisObject->cellLock() };
</ins><span class="cx">     auto* buffer = thisObject->buffer();
</span><span class="cx">     for (uint32_t index = 0; index < thisObject->m_capacity; ++index) {
</span><span class="cx">         auto* bucket = buffer + index;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeWeakMapImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/WeakMapImpl.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/WeakMapImpl.h        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/WeakMapImpl.h   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -210,7 +210,7 @@
</span><span class="cx"> 
</span><span class="cx">         Base::finishCreation(vm);
</span><span class="cx"> 
</span><del>-        auto locker = holdLock(cellLock());
</del><ins>+        Locker locker { cellLock() };
</ins><span class="cx">         makeAndSetNewBuffer(locker, initialCapacity);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeWeakMapImplInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/WeakMapImplInlines.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/WeakMapImplInlines.h 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/WeakMapImplInlines.h    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> 
</span><span class="cx">     // This rehash modifies m_buffer which is not GC-managed buffer. But m_buffer can be touched in
</span><span class="cx">     // visitOutputConstraints. Thus, we should guard it with cellLock.
</span><del>-    auto locker = holdLock(cellLock());
</del><ins>+    Locker locker { cellLock() };
</ins><span class="cx"> 
</span><span class="cx">     uint32_t oldCapacity = m_capacity;
</span><span class="cx">     MallocPtr<WeakMapBufferType, JSValueMalloc> oldBuffer = WTFMove(m_buffer);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeWideningNumberPredictionFuzzerAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/WideningNumberPredictionFuzzerAgent.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/WideningNumberPredictionFuzzerAgent.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/runtime/WideningNumberPredictionFuzzerAgent.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> 
</span><span class="cx"> SpeculatedType WideningNumberPredictionFuzzerAgent::getPrediction(CodeBlock* codeBlock, const CodeOrigin& codeOrigin, SpeculatedType original)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx"> 
</span><span class="cx">     if (!(original && speculationChecked(original, SpecBytecodeNumber)))
</span><span class="cx">         return original;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretoolsCompilerTimingScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tools/CompilerTimingScope.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tools/CompilerTimingScope.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/tools/CompilerTimingScope.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx">     
</span><span class="cx">     Seconds addToTotal(const char* compilerName, const char* name, Seconds duration)
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(lock);
</del><ins>+        Locker locker { lock };
</ins><span class="cx"> 
</span><span class="cx">         for (auto& tuple : totals) {
</span><span class="cx">             if (String(std::get<0>(tuple)) == String(compilerName) && String(std::get<1>(tuple)) == String(name)) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretoolsFunctionOverridescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tools/FunctionOverrides.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tools/FunctionOverrides.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/tools/FunctionOverrides.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx"> FunctionOverrides::FunctionOverrides(const char* overridesFileName)
</span><span class="cx"> {
</span><span class="cx">     FunctionOverridesAssertScope assertScope;
</span><del>-    parseOverridesInFile(holdLock(m_lock), overridesFileName);
</del><ins>+    parseOverridesInFile(Locker { m_lock }, overridesFileName);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void FunctionOverrides::reinstallOverrides()
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx"> {
</span><span class="cx">     FunctionOverridesAssertScope assertScope;
</span><span class="cx">     FunctionOverrides& overrides = FunctionOverrides::overrides();
</span><del>-    auto locker = holdLock(overrides.m_lock);
</del><ins>+    Locker locker { overrides.m_lock };
</ins><span class="cx">     const char* overridesFileName = Options::functionOverrides();
</span><span class="cx">     overrides.clear(locker);
</span><span class="cx">     overrides.parseOverridesInFile(locker, overridesFileName);
</span><span class="lines">@@ -167,7 +167,7 @@
</span><span class="cx"> 
</span><span class="cx">     String newBody;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(overrides.m_lock);
</del><ins>+        Locker locker { overrides.m_lock };
</ins><span class="cx">         auto it = overrides.m_entries.find(sourceBodyString.isolatedCopy());
</span><span class="cx">         if (it == overrides.m_entries.end())
</span><span class="cx">             return false;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretoolsIntegritycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tools/Integrity.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tools/Integrity.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/tools/Integrity.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool Random::reloadAndCheckShouldAuditSlow(VM& vm)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx"> 
</span><span class="cx">     if (!Options::randomIntegrityAuditRate()) {
</span><span class="cx">         m_triggerBits = 0; // Never trigger, and don't bother reloading.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretoolsVMInspectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tools/VMInspector.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tools/VMInspector.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/tools/VMInspector.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -54,13 +54,13 @@
</span><span class="cx"> 
</span><span class="cx"> void VMInspector::add(VM* vm)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     m_vmList.append(vm);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void VMInspector::remove(VM* vm)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     m_vmList.remove(vm);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -171,7 +171,7 @@
</span><span class="cx">             return FunctorStatus::Continue; // Skip this VM.
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        auto locker = holdLock(codeBlockSetLock);
</del><ins>+        Locker locker { codeBlockSetLock };
</ins><span class="cx">         vm.heap.forEachCodeBlockIgnoringJITPlans(locker, [&] (CodeBlock* cb) {
</span><span class="cx">             JITCode* jitCode = cb->jitCode().get();
</span><span class="cx">             if (!jitCode) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmBBQPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmBBQPlan.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmBBQPlan.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmBBQPlan.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">             parseAndValidateModule();
</span><span class="cx">             if (!hasWork()) {
</span><span class="cx">                 ASSERT(m_state == State::Validated);
</span><del>-                complete(holdLock(m_lock));
</del><ins>+                complete(Locker { m_lock });
</ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             FALLTHROUGH;
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx"> 
</span><span class="cx">     LinkBuffer linkBuffer(*context.wasmEntrypointJIT, nullptr, LinkBuffer::Profile::Wasm, JITCompilationCanFail);
</span><span class="cx">     if (UNLIKELY(linkBuffer.didFailToAllocate())) {
</span><del>-        Base::fail(holdLock(m_lock), makeString("Out of executable memory while tiering up function at index ", String::number(m_functionIndex)));
</del><ins>+        Base::fail(Locker { m_lock }, makeString("Out of executable memory while tiering up function at index ", String::number(m_functionIndex)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -143,7 +143,7 @@
</span><span class="cx"> 
</span><span class="cx">         {
</span><span class="cx">             LLIntCallee& llintCallee = m_codeBlock->m_llintCallees->at(m_functionIndex).get();
</span><del>-            auto locker = holdLock(llintCallee.tierUpCounter().m_lock);
</del><ins>+            Locker locker { llintCallee.tierUpCounter().m_lock };
</ins><span class="cx">             llintCallee.setReplacement(callee.copyRef());
</span><span class="cx">             llintCallee.tierUpCounter().m_compilationStatus = LLIntTierUpCounter::CompilationStatus::Compiled;
</span><span class="cx">         }
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx"> 
</span><span class="cx">     dataLogLnIf(WasmBBQPlanInternal::verbose, "Finished BBQ ", m_functionIndex);
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     moveToState(State::Completed);
</span><span class="cx">     runCompletionTasks(locker);
</span><span class="cx"> }
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">     m_wasmInternalFunctions[functionIndex] = compileFunction(functionIndex, m_compilationContexts[functionIndex], m_unlinkedWasmToWasmCalls[functionIndex], m_tierUpCounts[functionIndex].get());
</span><span class="cx"> 
</span><span class="cx">     if (m_exportedFunctionIndices.contains(functionIndex) || m_moduleInformation->referencedFunctions().contains(functionIndex)) {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         SignatureIndex signatureIndex = m_moduleInformation->internalFunctionSignatureIndices[functionIndex];
</span><span class="cx">         const Signature& signature = SignatureInformation::get(signatureIndex);
</span><span class="cx">         auto result = m_embedderToWasmInternalFunctions.add(functionIndex, createJSToWasmWrapper(*m_compilationContexts[functionIndex].embedderEntrypointJIT, signature, &m_unlinkedWasmToWasmCalls[functionIndex], m_moduleInformation.get(), m_mode, functionIndex));
</span><span class="lines">@@ -199,7 +199,7 @@
</span><span class="cx">         parseAndCompileResult = parseAndCompile(context, function, signature, unlinkedWasmToWasmCalls, osrEntryScratchBufferSize, m_moduleInformation.get(), m_mode, CompilationMode::BBQMode, functionIndex, UINT32_MAX, tierUp);
</span><span class="cx"> 
</span><span class="cx">     if (UNLIKELY(!parseAndCompileResult)) {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         if (!m_errorMessage) {
</span><span class="cx">             // Multiple compiles could fail simultaneously. We arbitrarily choose the first.
</span><span class="cx">             fail(locker, makeString(parseAndCompileResult.error(), ", in function at index ", String::number(functionIndex))); // FIXME make this an Expected.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmCalleeRegistryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmCalleeRegistry.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmCalleeRegistry.h    2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmCalleeRegistry.h       2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -45,13 +45,13 @@
</span><span class="cx"> 
</span><span class="cx">     void registerCallee(Callee* callee)
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         m_calleeSet.add(callee);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void unregisterCallee(Callee* callee)
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         m_calleeSet.remove(callee);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmCodeBlock.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmCodeBlock.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmCodeBlock.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (Options::useWasmLLInt()) {
</span><span class="cx">         m_plan = adoptRef(*new LLIntPlan(context, makeRef(moduleInformation), m_llintCallees->data(), createSharedTask<Plan::CallbackType>([this, protectedThis = WTFMove(protectedThis)] (Plan&) {
</span><del>-            auto locker = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             if (m_plan->failed()) {
</span><span class="cx">                 m_errorMessage = m_plan->errorMessage();
</span><span class="cx">                 setCompilationFinished();
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx"> #if ENABLE(WEBASSEMBLY_B3JIT)
</span><span class="cx">     else {
</span><span class="cx">         m_plan = adoptRef(*new BBQPlan(context, makeRef(moduleInformation), CompilerMode::FullCompile, createSharedTask<Plan::CallbackType>([this, protectedThis = WTFMove(protectedThis)] (Plan&) {
</span><del>-            auto locker = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             if (m_plan->failed()) {
</span><span class="cx">                 m_errorMessage = m_plan->errorMessage();
</span><span class="cx">                 setCompilationFinished();
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx"> {
</span><span class="cx">     RefPtr<Plan> plan;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         plan = m_plan;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -134,7 +134,7 @@
</span><span class="cx"> {
</span><span class="cx">     RefPtr<Plan> plan;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         plan = m_plan;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmContext.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmContext.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmContext.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx">     if (!size)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_scratchBufferLock);
</del><ins>+    Locker locker { m_scratchBufferLock };
</ins><span class="cx">     if (size > m_sizeOfLastScratchBuffer) {
</span><span class="cx">         m_sizeOfLastScratchBuffer = size * 2;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmEntryPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmEntryPlan.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmEntryPlan.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmEntryPlan.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -89,13 +89,13 @@
</span><span class="cx"> 
</span><span class="cx">     m_streamingParser.addBytes(source, sourceLength);
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         if (failed())
</span><span class="cx">             return false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (m_streamingParser.finalize() != StreamingParser::State::Finished) {
</span><del>-        fail(holdLock(m_lock), m_streamingParser.errorMessage());
</del><ins>+        fail(Locker { m_lock }, m_streamingParser.errorMessage());
</ins><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -129,7 +129,7 @@
</span><span class="cx">         if (UNLIKELY(!binding)) {
</span><span class="cx">             switch (binding.error()) {
</span><span class="cx">             case BindingFailure::OutOfMemory:
</span><del>-                return fail(holdLock(m_lock), makeString("Out of executable memory at import ", String::number(importIndex)));
</del><ins>+                return fail(Locker { m_lock }, makeString("Out of executable memory at import ", String::number(importIndex)));
</ins><span class="cx">             }
</span><span class="cx">             RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx">         }
</span><span class="lines">@@ -201,7 +201,7 @@
</span><span class="cx"> 
</span><span class="cx">         uint32_t functionIndex;
</span><span class="cx">         {
</span><del>-            auto locker = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             if (m_currentIndex >= m_numberOfFunctions) {
</span><span class="cx">                 if (hasWork())
</span><span class="cx">                     moveToState(State::Compiled);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmEntryPlanh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmEntryPlan.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmEntryPlan.h 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmEntryPlan.h    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -106,7 +106,7 @@
</span><span class="cx">     bool tryReserveCapacity(Vector<T>& vector, size_t size, const char* what)
</span><span class="cx">     {
</span><span class="cx">         if (UNLIKELY(!vector.tryReserveCapacity(size))) {
</span><del>-            fail(holdLock(m_lock), WTF::makeString("Failed allocating enough space for ", size, what));
</del><ins>+            fail(Locker { m_lock }, WTF::makeString("Failed allocating enough space for ", size, what));
</ins><span class="cx">             return false;
</span><span class="cx">         }
</span><span class="cx">         return true;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmFaultSignalHandlercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">                 if (LLInt::isWasmLLIntPC(faultingInstruction))
</span><span class="cx">                     return true;
</span><span class="cx">                 auto& calleeRegistry = CalleeRegistry::singleton();
</span><del>-                auto locker = holdLock(calleeRegistry.getLock());
</del><ins>+                Locker locker { calleeRegistry.getLock() };
</ins><span class="cx">                 for (auto* callee : calleeRegistry.allCallees(locker)) {
</span><span class="cx">                     auto [start, end] = callee->range();
</span><span class="cx">                     dataLogLnIf(WasmFaultSignalHandlerInternal::verbose, "function start: ", RawPointer(start), " end: ", RawPointer(end));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmInstancecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmInstance.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmInstance.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmInstance.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx">     ASSERT(m_owner);
</span><span class="cx">     ASSERT(value.isCallable(owner<JSWebAssemblyInstance>()->vm()));
</span><span class="cx">     ASSERT(!m_functionWrappers.contains(i));
</span><del>-    auto locker = holdLock(owner<JSWebAssemblyInstance>()->cellLock());
</del><ins>+    Locker locker { owner<JSWebAssemblyInstance>()->cellLock() };
</ins><span class="cx">     m_functionWrappers.set(i, WriteBarrier<Unknown>(owner<JSWebAssemblyInstance>()->vm(), owner<JSWebAssemblyInstance>(), value));
</span><span class="cx">     ASSERT(getFunctionWrapper(i) == value);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmLLIntPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">     Expected<std::unique_ptr<FunctionCodeBlock>, String> parseAndCompileResult = parseAndCompileBytecode(function.data.data(), function.data.size(), signature, m_moduleInformation.get(), functionIndex);
</span><span class="cx"> 
</span><span class="cx">     if (UNLIKELY(!parseAndCompileResult)) {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         if (!m_errorMessage) {
</span><span class="cx">             // Multiple compiles could fail simultaneously. We arbitrarily choose the first.
</span><span class="cx">             fail(locker, makeString(parseAndCompileResult.error(), ", in function at index ", String::number(functionIndex))); // FIXME make this an Expected.
</span><span class="lines">@@ -191,18 +191,18 @@
</span><span class="cx"> 
</span><span class="cx"> void LLIntPlan::completeInStreaming()
</span><span class="cx"> {
</span><del>-    complete(holdLock(m_lock));
</del><ins>+    complete(Locker { m_lock });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void LLIntPlan::didCompileFunctionInStreaming()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     moveToState(EntryPlan::State::Compiled);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void LLIntPlan::didFailInStreaming(String&& message)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     if (!m_errorMessage)
</span><span class="cx">         fail(locker, WTFMove(message));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmMachineThreadscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmMachineThreads.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmMachineThreads.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmMachineThreads.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx"> 
</span><span class="cx"> void resetInstructionCacheOnAllThreads()
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(wasmThreads().getLock());
</del><ins>+    Locker locker { wasmThreads().getLock() };
</ins><span class="cx">     for (auto& thread : wasmThreads().threads(locker)) {
</span><span class="cx">         sendMessage(thread.get(), [] (const PlatformRegisters&) {
</span><span class="cx">             // It's likely that the signal handler will already reset the instruction cache but we might as well be sure.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmMemorycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmMemory.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmMemory.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmMemory.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -105,7 +105,7 @@
</span><span class="cx">     MemoryResult tryAllocateFastMemory()
</span><span class="cx">     {
</span><span class="cx">         MemoryResult result = [&] {
</span><del>-            auto holder = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             if (m_fastMemories.size() >= m_maxFastMemoryCount)
</span><span class="cx">                 return MemoryResult(nullptr, MemoryResult::SyncTryToReclaimMemory);
</span><span class="cx">             
</span><span class="lines">@@ -128,7 +128,7 @@
</span><span class="cx">     void freeFastMemory(void* basePtr)
</span><span class="cx">     {
</span><span class="cx">         {
</span><del>-            auto holder = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             Gigacage::freeVirtualPages(Gigacage::Primitive, basePtr, Memory::fastMappedBytes());
</span><span class="cx">             m_fastMemories.removeFirst(basePtr);
</span><span class="cx">         }
</span><span class="lines">@@ -139,7 +139,7 @@
</span><span class="cx">     MemoryResult tryAllocateGrowableBoundsCheckingMemory(size_t mappedCapacity)
</span><span class="cx">     {
</span><span class="cx">         MemoryResult result = [&] {
</span><del>-            auto holder = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             void* result = Gigacage::tryAllocateZeroedVirtualPages(Gigacage::Primitive, mappedCapacity);
</span><span class="cx">             if (!result)
</span><span class="cx">                 return MemoryResult(nullptr, MemoryResult::SyncTryToReclaimMemory);
</span><span class="lines">@@ -157,7 +157,7 @@
</span><span class="cx">     void freeGrowableBoundsCheckingMemory(void* basePtr, size_t mappedCapacity)
</span><span class="cx">     {
</span><span class="cx">         {
</span><del>-            auto holder = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             Gigacage::freeVirtualPages(Gigacage::Primitive, basePtr, mappedCapacity);
</span><span class="cx">             m_growableBoundsCheckingMemories.erase(std::make_pair(bitwise_cast<uintptr_t>(basePtr), mappedCapacity));
</span><span class="cx">         }
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">     bool isInGrowableOrFastMemory(void* address)
</span><span class="cx">     {
</span><span class="cx">         // NOTE: This can be called from a signal handler, but only after we proved that we're in JIT code or WasmLLInt code.
</span><del>-        auto holder = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         for (void* memory : m_fastMemories) {
</span><span class="cx">             char* start = static_cast<char*>(memory);
</span><span class="cx">             if (start <= address && address <= start + Memory::fastMappedBytes())
</span><span class="lines">@@ -197,7 +197,7 @@
</span><span class="cx">     MemoryResult::Kind tryAllocatePhysicalBytes(size_t bytes)
</span><span class="cx">     {
</span><span class="cx">         MemoryResult::Kind result = [&] {
</span><del>-            auto holder = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             if (m_physicalBytes + bytes > memoryLimit())
</span><span class="cx">                 return MemoryResult::SyncTryToReclaimMemory;
</span><span class="cx">             
</span><span class="lines">@@ -217,7 +217,7 @@
</span><span class="cx">     void freePhysicalBytes(size_t bytes)
</span><span class="cx">     {
</span><span class="cx">         {
</span><del>-            auto holder = holdLock(m_lock);
</del><ins>+            Locker locker { m_lock };
</ins><span class="cx">             m_physicalBytes -= bytes;
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="lines">@@ -476,7 +476,7 @@
</span><span class="cx">     Wasm::PageCount oldPageCount;
</span><span class="cx">     Wasm::PageCount newPageCount;
</span><span class="cx">     auto result = ([&]() -> Expected<PageCount, Memory::GrowFailReason> {
</span><del>-        auto locker = holdLock(m_handle->lock());
</del><ins>+        Locker locker { m_handle->lock() };
</ins><span class="cx"> 
</span><span class="cx">         oldPageCount = sizeInPages();
</span><span class="cx">         newPageCount = oldPageCount + delta;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmModulecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmModule.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmModule.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmModule.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx"> Ref<CodeBlock> Module::getOrCreateCodeBlock(Context* context, MemoryMode mode)
</span><span class="cx"> {
</span><span class="cx">     RefPtr<CodeBlock> codeBlock;
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     codeBlock = m_codeBlocks[static_cast<uint8_t>(mode)];
</span><span class="cx">     // If a previous attempt at a compile errored out, let's try again.
</span><span class="cx">     // Compilations from valid modules can fail because OOM and cancellation.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmOMGForOSREntryPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmOMGForOSREntryPlan.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmOMGForOSREntryPlan.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmOMGForOSREntryPlan.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx">     auto parseAndCompileResult = parseAndCompile(context, function, signature, unlinkedCalls, osrEntryScratchBufferSize, m_moduleInformation.get(), m_mode, CompilationMode::OMGForOSREntryMode, m_functionIndex, m_loopIndex);
</span><span class="cx"> 
</span><span class="cx">     if (UNLIKELY(!parseAndCompileResult)) {
</span><del>-        fail(holdLock(m_lock), makeString(parseAndCompileResult.error(), "when trying to tier up ", String::number(m_functionIndex)));
</del><ins>+        fail(Locker { m_lock }, makeString(parseAndCompileResult.error(), "when trying to tier up ", String::number(m_functionIndex)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">     Entrypoint omgEntrypoint;
</span><span class="cx">     LinkBuffer linkBuffer(*context.wasmEntrypointJIT, nullptr, LinkBuffer::Profile::Wasm, JITCompilationCanFail);
</span><span class="cx">     if (UNLIKELY(linkBuffer.didFailToAllocate())) {
</span><del>-        Base::fail(holdLock(m_lock), makeString("Out of executable memory while tiering up function at index ", String::number(m_functionIndex)));
</del><ins>+        Base::fail(Locker { m_lock }, makeString("Out of executable memory while tiering up function at index ", String::number(m_functionIndex)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -100,7 +100,7 @@
</span><span class="cx">     {
</span><span class="cx">         MacroAssembler::repatchPointer(parseAndCompileResult.value()->calleeMoveLocation, CalleeBits::boxWasm(callee.ptr()));
</span><span class="cx"> 
</span><del>-        auto locker = holdLock(m_codeBlock->m_lock);
</del><ins>+        Locker locker { m_codeBlock->m_lock };
</ins><span class="cx">         for (auto& call : callee->wasmToWasmCallsites()) {
</span><span class="cx">             MacroAssemblerCodePtr<WasmEntryPtrTag> entrypoint;
</span><span class="cx">             if (call.functionIndexSpace < m_module->moduleInformation().importFunctionCount())
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">             switch (m_callee->compilationMode()) {
</span><span class="cx">             case CompilationMode::LLIntMode: {
</span><span class="cx">                 LLIntCallee* llintCallee = static_cast<LLIntCallee*>(m_callee.ptr());
</span><del>-                auto locker = holdLock(llintCallee->tierUpCounter().m_lock);
</del><ins>+                Locker locker { llintCallee->tierUpCounter().m_lock };
</ins><span class="cx">                 llintCallee->setOSREntryCallee(callee.copyRef());
</span><span class="cx">                 llintCallee->tierUpCounter().m_loopCompilationStatus = LLIntTierUpCounter::CompilationStatus::Compiled;
</span><span class="cx">                 break;
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx">             }
</span><span class="cx">             case CompilationMode::BBQMode: {
</span><span class="cx">                 BBQCallee* bbqCallee = static_cast<BBQCallee*>(m_callee.ptr());
</span><del>-                auto locker = holdLock(bbqCallee->tierUpCount()->getLock());
</del><ins>+                Locker locker { bbqCallee->tierUpCount()->getLock() };
</ins><span class="cx">                 bbqCallee->setOSREntryCallee(callee.copyRef());
</span><span class="cx">                 bbqCallee->tierUpCount()->osrEntryTriggers()[m_loopIndex] = TierUpCount::TriggerReason::CompilationDone;
</span><span class="cx">                 bbqCallee->tierUpCount()->m_compilationStatusForOMGForOSREntry = TierUpCount::CompilationStatus::Compiled;
</span><span class="lines">@@ -137,7 +137,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx">     dataLogLnIf(WasmOMGForOSREntryPlanInternal::verbose, "Finished OMGForOSREntry ", m_functionIndex);
</span><del>-    complete(holdLock(m_lock));
</del><ins>+    complete(Locker { m_lock });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::Wasm
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmOMGPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmOMGPlan.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmOMGPlan.cpp 2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmOMGPlan.cpp    2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx">     auto parseAndCompileResult = parseAndCompile(context, function, signature, unlinkedCalls, osrEntryScratchBufferSize, m_moduleInformation.get(), m_mode, CompilationMode::OMGMode, m_functionIndex, UINT32_MAX);
</span><span class="cx"> 
</span><span class="cx">     if (UNLIKELY(!parseAndCompileResult)) {
</span><del>-        fail(holdLock(m_lock), makeString(parseAndCompileResult.error(), "when trying to tier up ", String::number(m_functionIndex)));
</del><ins>+        fail(Locker { m_lock }, makeString(parseAndCompileResult.error(), "when trying to tier up ", String::number(m_functionIndex)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx">     Entrypoint omgEntrypoint;
</span><span class="cx">     LinkBuffer linkBuffer(*context.wasmEntrypointJIT, nullptr, LinkBuffer::Profile::Wasm, JITCompilationCanFail);
</span><span class="cx">     if (UNLIKELY(linkBuffer.didFailToAllocate())) {
</span><del>-        Base::fail(holdLock(m_lock), makeString("Out of executable memory while tiering up function at index ", String::number(m_functionIndex)));
</del><ins>+        Base::fail(Locker { m_lock }, makeString("Out of executable memory while tiering up function at index ", String::number(m_functionIndex)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -122,13 +122,13 @@
</span><span class="cx"> 
</span><span class="cx">         {
</span><span class="cx">             if (BBQCallee* bbqCallee = m_codeBlock->m_bbqCallees[m_functionIndex].get()) {
</span><del>-                auto locker = holdLock(bbqCallee->tierUpCount()->getLock());
</del><ins>+                Locker locker { bbqCallee->tierUpCount()->getLock() };
</ins><span class="cx">                 bbqCallee->setReplacement(callee.copyRef());
</span><span class="cx">                 bbqCallee->tierUpCount()->m_compilationStatusForOMG = TierUpCount::CompilationStatus::Compiled;
</span><span class="cx">             }
</span><span class="cx">             if (m_codeBlock->m_llintCallees) {
</span><span class="cx">                 LLIntCallee& llintCallee = m_codeBlock->m_llintCallees->at(m_functionIndex).get();
</span><del>-                auto locker = holdLock(llintCallee.tierUpCounter().m_lock);
</del><ins>+                Locker locker { llintCallee.tierUpCounter().m_lock };
</ins><span class="cx">                 llintCallee.setReplacement(callee.copyRef());
</span><span class="cx">                 llintCallee.tierUpCounter().m_compilationStatus = LLIntTierUpCounter::CompilationStatus::Compiled;
</span><span class="cx">             }
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     dataLogLnIf(WasmOMGPlanInternal::verbose, "Finished OMG ", m_functionIndex);
</span><del>-    complete(holdLock(m_lock));
</del><ins>+    complete(Locker { m_lock });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::Wasm
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmOperations.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmOperations.cpp      2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmOperations.cpp 2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool compile = false;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(tierUp.getLock());
</del><ins>+        Locker locker { tierUp.getLock() };
</ins><span class="cx">         switch (tierUp.m_compilationStatusForOMG) {
</span><span class="cx">         case TierUpCount::CompilationStatus::StartCompilation:
</span><span class="cx">             tierUp.setOptimizationThresholdBasedOnCompilationResult(functionIndex, CompilationDeferred);
</span><span class="lines">@@ -278,7 +278,7 @@
</span><span class="cx"> 
</span><span class="cx">     TierUpCount::CompilationStatus compilationStatus = TierUpCount::CompilationStatus::NotCompiled;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(tierUp.getLock());
</del><ins>+        Locker locker { tierUp.getLock() };
</ins><span class="cx">         compilationStatus = tierUp.m_compilationStatusForOMGForOSREntry;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -296,7 +296,7 @@
</span><span class="cx">         // We were asked to enter as soon as possible and start compiling an
</span><span class="cx">         // entry for the current loopIndex. Unset this trigger so we
</span><span class="cx">         // don't continually enter.
</span><del>-        auto locker = holdLock(tierUp.getLock());
</del><ins>+        Locker locker { tierUp.getLock() };
</ins><span class="cx">         TierUpCount::TriggerReason reason = tierUp.osrEntryTriggers()[loopIndex];
</span><span class="cx">         if (reason == TierUpCount::TriggerReason::StartCompilation) {
</span><span class="cx">             tierUp.osrEntryTriggers()[loopIndex] = TierUpCount::TriggerReason::DontTrigger;
</span><span class="lines">@@ -350,7 +350,7 @@
</span><span class="cx">             // we'll eventually trigger some loop that is executing to compile. We start with trying to compile outer
</span><span class="cx">             // loops since we believe outer loop compilations reveal the best opportunities for optimizing code.
</span><span class="cx">             uint32_t currentLoopIndex = tierUp.outerLoops()[loopIndex];
</span><del>-            auto locker = holdLock(tierUp.getLock());
</del><ins>+            Locker locker { tierUp.getLock() };
</ins><span class="cx"> 
</span><span class="cx">             // We already started OMGForOSREntryPlan.
</span><span class="cx">             if (callee.didStartCompilingOSREntryCallee())
</span><span class="lines">@@ -382,7 +382,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool startOSREntryCompilation = false;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(tierUp.getLock());
</del><ins>+        Locker locker { tierUp.getLock() };
</ins><span class="cx">         if (tierUp.m_compilationStatusForOMGForOSREntry == TierUpCount::CompilationStatus::NotCompiled) {
</span><span class="cx">             tierUp.m_compilationStatusForOMGForOSREntry = TierUpCount::CompilationStatus::StartCompilation;
</span><span class="cx">             startOSREntryCompilation = true;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmSignatureInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmSignatureInlines.h (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmSignatureInlines.h  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmSignatureInlines.h     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (ASSERT_ENABLED) {
</span><span class="cx">         SignatureInformation& info = singleton();
</span><del>-        auto locker = holdLock(info.m_lock);
</del><ins>+        Locker locker { info.m_lock };
</ins><span class="cx">         ASSERT_UNUSED(info, info.m_signatureSet.contains(SignatureHash { makeRef(const_cast<Signature&>(signature)) }));
</span><span class="cx">     }
</span><span class="cx">     return bitwise_cast<SignatureIndex>(&signature);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmSlowPaths.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmSlowPaths.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmSlowPaths.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool compile = false;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(tierUpCounter.m_lock);
</del><ins>+        Locker locker { tierUpCounter.m_lock };
</ins><span class="cx">         switch (tierUpCounter.m_compilationStatus) {
</span><span class="cx">         case Wasm::LLIntTierUpCounter::CompilationStatus::NotCompiled:
</span><span class="cx">             compile = true;
</span><span class="lines">@@ -211,7 +211,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool compile = false;
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(tierUpCounter.m_lock);
</del><ins>+        Locker locker { tierUpCounter.m_lock };
</ins><span class="cx">         switch (tierUpCounter.m_loopCompilationStatus) {
</span><span class="cx">         case Wasm::LLIntTierUpCounter::CompilationStatus::NotCompiled:
</span><span class="cx">             compile = true;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmStreamingCompilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmStreamingCompiler.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmStreamingCompiler.cpp       2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmStreamingCompiler.cpp  2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx"> 
</span><span class="cx"> void StreamingCompiler::didCompileFunction(StreamingPlan& plan)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     ASSERT(m_threadedCompilationStarted);
</span><span class="cx">     if (plan.failed())
</span><span class="cx">         m_plan->didFailInStreaming(plan.errorMessage());
</span><span class="lines">@@ -191,7 +191,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         m_finalized = true;
</span><span class="cx">         completeIfNecessary(locker);
</span><span class="cx">     }
</span><span class="lines">@@ -200,7 +200,7 @@
</span><span class="cx"> void StreamingCompiler::fail(JSGlobalObject* globalObject, JSValue error)
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         ASSERT(!m_finalized);
</span><span class="cx">         if (m_eagerFailed)
</span><span class="cx">             return;
</span><span class="lines">@@ -214,7 +214,7 @@
</span><span class="cx"> void StreamingCompiler::cancel()
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-        auto locker = holdLock(m_lock);
</del><ins>+        Locker locker { m_lock };
</ins><span class="cx">         ASSERT(!m_finalized);
</span><span class="cx">         if (m_eagerFailed)
</span><span class="cx">             return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmStreamingPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmStreamingPlan.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmStreamingPlan.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmStreamingPlan.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx"> {
</span><span class="cx">     m_plan->compileFunction(m_functionIndex);
</span><span class="cx">     dataLogLnIf(WasmStreamingPlanInternal::verbose, "Finished Streaming ", m_functionIndex);
</span><del>-    complete(holdLock(m_lock));
</del><ins>+    complete(Locker { m_lock });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::Wasm
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmTablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmTable.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmTable.cpp   2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmTable.cpp      2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">     if (delta == 0)
</span><span class="cx">         return length();
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(m_owner->cellLock());
</del><ins>+    Locker locker { m_owner->cellLock() };
</ins><span class="cx"> 
</span><span class="cx">     using Checked = Checked<uint32_t, RecordOverflow>;
</span><span class="cx">     Checked newLengthChecked = length();
</span><span class="lines">@@ -170,7 +170,7 @@
</span><span class="cx"> void Table::visitAggregateImpl(Visitor& visitor)
</span><span class="cx"> {
</span><span class="cx">     RELEASE_ASSERT(m_owner);
</span><del>-    auto locker = holdLock(m_owner->cellLock());
</del><ins>+    Locker locker { m_owner->cellLock() };
</ins><span class="cx">     for (unsigned i = 0; i < m_length; ++i)
</span><span class="cx">         visitor.append(m_jsValues.get()[i]);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmThunkscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmThunks.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmThunks.cpp  2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmThunks.cpp     2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef<JITThunkPtrTag> Thunks::stub(ThunkGenerator generator)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx">     return stub(locker, generator);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -133,7 +133,7 @@
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef<JITThunkPtrTag> Thunks::existingStub(ThunkGenerator generator)
</span><span class="cx"> {
</span><del>-    auto locker = holdLock(m_lock);
</del><ins>+    Locker locker { m_lock };
</ins><span class="cx"> 
</span><span class="cx">     auto iter = m_stubs.find(generator);
</span><span class="cx">     if (iter != m_stubs.end())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmWorklistcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmWorklist.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmWorklist.cpp        2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/WasmWorklist.cpp   2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx">             return complete(locker);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return complete(holdLock(*worklist.m_lock));
</del><ins>+        return complete(Locker { *worklist.m_lock });
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     const char* name() const final
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmjsJSWebAssemblyInstancecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp (277908 => 277909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp    2021-05-22 03:04:24 UTC (rev 277908)
+++ trunk/Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp       2021-05-22 03:13:17 UTC (rev 277909)
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx">     for (size_t i : thisObject->instance().globalsToMark())
</span><span class="cx">         visitor.appendUnbarriered(JSValue::decode(thisObject->instance().loadI64Global(i)));
</span><span class="cx"> 
</span><del>-    auto locker = holdLock(cell->cellLock());
</del><ins>+    Locker locker { cell->cellLock() };
</ins><span class="cx">     for (auto& wrapper : thisObject->instance().functionWrappers())
</span><span class="cx">         visitor.appendUnbarriered(wrapper.get());
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>