Modified: trunk/Source/_javascript_Core/ChangeLog (157432 => 157433)
--- trunk/Source/_javascript_Core/ChangeLog 2013-10-15 00:02:52 UTC (rev 157432)
+++ trunk/Source/_javascript_Core/ChangeLog 2013-10-15 00:05:45 UTC (rev 157433)
@@ -1,3 +1,16 @@
+2013-10-14 Filip Pizlo <[email protected]>
+
+ DFG PutById IC should use the ConcurrentJITLocker since it's now dealing with IC's that get read by the compiler thread
+ https://bugs.webkit.org/show_bug.cgi?id=122786
+
+ Reviewed by Mark Hahnenberg.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::resetStub): Resetting a stub should acquire the lock since this is observable from the thread; but we should only acquire the lock if we're resetting outside of GC.
+ * jit/Repatch.cpp:
+ (JSC::repatchPutByID): Doing the PutById patching should hold the lock.
+ (JSC::buildPutByIdList): Ditto.
+
2013-10-14 Nadav Rotem <[email protected]>
Add FTL support for LogicalNot(string)
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (157432 => 157433)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2013-10-15 00:02:52 UTC (rev 157432)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2013-10-15 00:05:45 UTC (rev 157433)
@@ -2362,6 +2362,8 @@
if (stubInfo.accessType == access_unset)
return;
+ ConcurrentJITLocker locker(m_lock);
+
RepatchBuffer repatchBuffer(this);
resetStubInternal(repatchBuffer, stubInfo);
}
Modified: trunk/Source/_javascript_Core/jit/Repatch.cpp (157432 => 157433)
--- trunk/Source/_javascript_Core/jit/Repatch.cpp 2013-10-15 00:02:52 UTC (rev 157432)
+++ trunk/Source/_javascript_Core/jit/Repatch.cpp 2013-10-15 00:05:45 UTC (rev 157433)
@@ -999,6 +999,8 @@
void repatchPutByID(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PutPropertySlot& slot, StructureStubInfo& stubInfo, PutKind putKind)
{
+ ConcurrentJITLocker locker(exec->codeBlock()->m_lock);
+
bool cached = tryCachePutByID(exec, baseValue, propertyName, slot, stubInfo, putKind);
if (!cached)
repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, appropriateGenericPutByIdFunction(slot, putKind));
@@ -1092,6 +1094,8 @@
void buildPutByIdList(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PutPropertySlot& slot, StructureStubInfo& stubInfo, PutKind putKind)
{
+ ConcurrentJITLocker locker(exec->codeBlock()->m_lock);
+
bool cached = tryBuildPutByIdList(exec, baseValue, propertyName, slot, stubInfo, putKind);
if (!cached)
repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, appropriateGenericPutByIdFunction(slot, putKind));