Title: [163219] tags/Safari-538.15/Source

Diff

Modified: tags/Safari-538.15/Source/_javascript_Core/ChangeLog (163218 => 163219)


--- tags/Safari-538.15/Source/_javascript_Core/ChangeLog	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/_javascript_Core/ChangeLog	2014-02-01 00:36:31 UTC (rev 163219)
@@ -1,3 +1,31 @@
+2014-01-31  Lucas Forschler  <[email protected]>
+
+        Merge r163214
+
+    2014-01-31  Michael Saboff  <[email protected]>
+
+            REGRESSION: Crash in sanitizeStackForVMImpl when scrolling @ lifehacker.com.au
+            https://bugs.webkit.org/show_bug.cgi?id=128017
+
+            Reviewed by Filip Pizlo.
+
+            Moved the setting and saving of VM::stackPointerAtVMEntry and the corresponding stack limit
+            to JSLock and JSLock::DropAllLocks.  The saved data is now stored in per-thread in
+            WTFThreadData.
+
+            * runtime/InitializeThreading.cpp:
+            (JSC::initializeThreading):
+            * runtime/JSLock.cpp:
+            (JSC::JSLock::lock):
+            (JSC::JSLock::unlock):
+            (JSC::JSLock::DropAllLocks::DropAllLocks):
+            (JSC::JSLock::DropAllLocks::~DropAllLocks):
+            * runtime/JSLock.h:
+            * runtime/VMEntryScope.cpp:
+            (JSC::VMEntryScope::VMEntryScope):
+            (JSC::VMEntryScope::~VMEntryScope):
+            * runtime/VMEntryScope.h:
+
 2014-01-30  Andreas Kling  <[email protected]>
 
         CodeBlock's cloned SymbolTables only need the captured names.

Modified: tags/Safari-538.15/Source/_javascript_Core/runtime/InitializeThreading.cpp (163218 => 163219)


--- tags/Safari-538.15/Source/_javascript_Core/runtime/InitializeThreading.cpp	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/_javascript_Core/runtime/InitializeThreading.cpp	2014-02-01 00:36:31 UTC (rev 163219)
@@ -72,6 +72,10 @@
 #ifndef NDEBUG
         DisallowGC::initialize();
 #endif
+        WTFThreadData& threadData = wtfThreadData();
+        
+        threadData.setSavedLastStackTop(threadData.stack().origin());
+        threadData.setSavedReservedZoneSize(Options::reservedZoneSize());
     });
 }
 

Modified: tags/Safari-538.15/Source/_javascript_Core/runtime/JSLock.cpp (163218 => 163219)


--- tags/Safari-538.15/Source/_javascript_Core/runtime/JSLock.cpp	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/_javascript_Core/runtime/JSLock.cpp	2014-02-01 00:36:31 UTC (rev 163219)
@@ -121,6 +121,16 @@
         m_ownerThread = currentThread;
         ASSERT(!m_lockCount);
         m_lockCount = 1;
+
+        WTFThreadData& threadData = wtfThreadData();
+
+        if (!m_vm->stackPointerAtVMEntry) {
+            entryStackPointer = &holder; // A proxy for the current stack pointer.
+            m_vm->stackPointerAtVMEntry = entryStackPointer;
+            threadData.setSavedReservedZoneSize(m_vm->updateStackLimitWithReservedZoneSize(Options::reservedZoneSize()));
+        }
+
+        m_vm->setLastStackTop(threadData.savedLastStackTop());
     }
 }
 
@@ -131,8 +141,13 @@
 
     m_lockCount--;
 
-    if (!m_lockCount)
+    if (!m_lockCount) {
+        if (m_vm && m_vm->stackPointerAtVMEntry == entryStackPointer) {
+            m_vm->stackPointerAtVMEntry = nullptr;
+            m_vm->updateStackLimitWithReservedZoneSize(wtfThreadData().savedReservedZoneSize());
+        }
         m_lock.unlock();
+    }
 }
 
 void JSLock::lock(ExecState* exec)
@@ -290,8 +305,13 @@
 #if PLATFORM(IOS)
     SpinLockHolder holder(&spinLock);
 #endif
-    m_savedReservedZoneSize = m_vm->reservedZoneSize();
-    m_savedStackPointerAtVMEntry = m_vm->stackPointerAtVMEntry;
+
+    WTFThreadData& threadData = wtfThreadData();
+    
+    threadData.setSavedStackPointerAtVMEntry(m_vm->stackPointerAtVMEntry);
+    threadData.setSavedLastStackTop(m_vm->lastStackTop());
+    threadData.setSavedReservedZoneSize(m_vm->reservedZoneSize());
+
     m_vm->stackPointerAtVMEntry = nullptr;
 
     if (alwaysDropLocks)
@@ -310,8 +330,13 @@
 #if PLATFORM(IOS)
     SpinLockHolder holder(&spinLock);
 #endif
-    m_savedReservedZoneSize = m_vm->reservedZoneSize();
-    m_savedStackPointerAtVMEntry = m_vm->stackPointerAtVMEntry;
+
+    WTFThreadData& threadData = wtfThreadData();
+    
+    threadData.setSavedStackPointerAtVMEntry(m_vm->stackPointerAtVMEntry);
+    threadData.setSavedLastStackTop(m_vm->lastStackTop());
+    threadData.setSavedReservedZoneSize(m_vm->reservedZoneSize());
+
     m_vm->stackPointerAtVMEntry = nullptr;
 
     if (alwaysDropLocks)
@@ -330,8 +355,11 @@
 #endif
     m_vm->apiLock().grabAllLocks(m_lockCount, spinLock);
 
-    m_vm->stackPointerAtVMEntry = m_savedStackPointerAtVMEntry;
-    m_vm->updateStackLimitWithReservedZoneSize(m_savedReservedZoneSize);
+    WTFThreadData& threadData = wtfThreadData();
+
+    m_vm->stackPointerAtVMEntry = threadData.savedStackPointerAtVMEntry();
+    m_vm->setLastStackTop(threadData.savedLastStackTop());
+    m_vm->updateStackLimitWithReservedZoneSize(threadData.savedReservedZoneSize());
 }
 
 } // namespace JSC

Modified: tags/Safari-538.15/Source/_javascript_Core/runtime/JSLock.h (163218 => 163219)


--- tags/Safari-538.15/Source/_javascript_Core/runtime/JSLock.h	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/_javascript_Core/runtime/JSLock.h	2014-02-01 00:36:31 UTC (rev 163219)
@@ -110,8 +110,6 @@
         private:
             intptr_t m_lockCount;
             RefPtr<VM> m_vm;
-            size_t m_savedReservedZoneSize;
-            void* m_savedStackPointerAtVMEntry;
         };
 
     private:
@@ -125,6 +123,7 @@
         intptr_t m_lockCount;
         unsigned m_lockDropDepth;
         VM* m_vm;
+        void* entryStackPointer;
     };
 
 } // namespace

Modified: tags/Safari-538.15/Source/_javascript_Core/runtime/VMEntryScope.cpp (163218 => 163219)


--- tags/Safari-538.15/Source/_javascript_Core/runtime/VMEntryScope.cpp	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/_javascript_Core/runtime/VMEntryScope.cpp	2014-02-01 00:36:31 UTC (rev 163219)
@@ -51,31 +51,20 @@
         vm.resetDateCache();
     }
 
-    if (!vm.stackPointerAtVMEntry) {
-        vm.stackPointerAtVMEntry = this;
-        m_savedReservedZoneSize = vm.updateStackLimitWithReservedZoneSize(Options::reservedZoneSize());
-    }
-
     // Clear the captured exception stack between entries
     vm.clearExceptionStack();
 }
 
 VMEntryScope::~VMEntryScope()
 {
-    if (m_vm.entryScope == this)
-        m_vm.entryScope = nullptr;
-    if (m_vm.stackPointerAtVMEntry == this) {
-        m_vm.stackPointerAtVMEntry = nullptr;
-        m_vm.updateStackLimitWithReservedZoneSize(m_savedReservedZoneSize);
-    }
+    if (m_vm.entryScope != this)
+        return;
 
+    m_vm.entryScope = nullptr;
+
     if (m_recompilationNeeded) {
-        if (m_vm.entryScope)
-            m_vm.entryScope->setRecompilationNeeded(true);
-        else {
-            if (Debugger* debugger = m_globalObject->debugger())
-                debugger->recompileAllJSFunctions(&m_vm);
-        }
+        if (Debugger* debugger = m_globalObject->debugger())
+            debugger->recompileAllJSFunctions(&m_vm);
     }
 }
 

Modified: tags/Safari-538.15/Source/_javascript_Core/runtime/VMEntryScope.h (163218 => 163219)


--- tags/Safari-538.15/Source/_javascript_Core/runtime/VMEntryScope.h	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/_javascript_Core/runtime/VMEntryScope.h	2014-02-01 00:36:31 UTC (rev 163219)
@@ -46,13 +46,10 @@
 
 private:
     VM& m_vm;
-    StackStats::CheckPoint m_stackCheckPoint;
     JSGlobalObject* m_globalObject;
-    size_t m_savedReservedZoneSize;
     bool m_recompilationNeeded;
 };
 
 } // namespace JSC
 
 #endif // VMEntryScope_h
-

Modified: tags/Safari-538.15/Source/WTF/ChangeLog (163218 => 163219)


--- tags/Safari-538.15/Source/WTF/ChangeLog	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/WTF/ChangeLog	2014-02-01 00:36:31 UTC (rev 163219)
@@ -1,3 +1,28 @@
+2014-01-31  Lucas Forschler  <[email protected]>
+
+        Merge r163214
+
+    2014-01-31  Michael Saboff  <[email protected]>
+
+            REGRESSION: Crash in sanitizeStackForVMImpl when scrolling @ lifehacker.com.au
+            https://bugs.webkit.org/show_bug.cgi?id=128017
+
+            Reviewed by Filip Pizlo.
+
+            Moved the setting and saving of VM::stackPointerAtVMEntry and the corresponding stack limit
+            to JSLock and JSLock::DropAllLocks.  The saved data is now stored in per-thread in
+            WTFThreadData.
+
+            * wtf/WTFThreadData.cpp:
+            (WTF::WTFThreadData::WTFThreadData):
+            * wtf/WTFThreadData.h:
+            (WTF::WTFThreadData::savedStackPointerAtVMEntry):
+            (WTF::WTFThreadData::setSavedStackPointerAtVMEntry):
+            (WTF::WTFThreadData::savedLastStackTop):
+            (WTF::WTFThreadData::setSavedLastStackTop):
+            (WTF::WTFThreadData::savedReservedZoneSize):
+            (WTF::WTFThreadData::setSavedReservedZoneSize):
+
 2014-01-30  Andrei Bucur  <[email protected]>
 
         Remove the ACCELERATED_COMPOSITING flag

Modified: tags/Safari-538.15/Source/WTF/wtf/WTFThreadData.cpp (163218 => 163219)


--- tags/Safari-538.15/Source/WTF/wtf/WTFThreadData.cpp	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/WTF/wtf/WTFThreadData.cpp	2014-02-01 00:36:31 UTC (rev 163219)
@@ -49,6 +49,9 @@
 #if ENABLE(STACK_STATS)
     , m_stackStats()
 #endif
+    , m_savedStackPointerAtVMEntry(0)
+    , m_savedLastStackTop(stack().origin())
+    , m_savedReservedZoneSize(0)
 {
 #if USE(WEB_THREAD)
     static JSC::IdentifierTable* sharedIdentifierTable = new JSC::IdentifierTable();

Modified: tags/Safari-538.15/Source/WTF/wtf/WTFThreadData.h (163218 => 163219)


--- tags/Safari-538.15/Source/WTF/wtf/WTFThreadData.h	2014-02-01 00:34:12 UTC (rev 163218)
+++ tags/Safari-538.15/Source/WTF/wtf/WTFThreadData.h	2014-02-01 00:36:31 UTC (rev 163219)
@@ -106,6 +106,36 @@
     }
 #endif
 
+    void* savedStackPointerAtVMEntry()
+    {
+        return m_savedStackPointerAtVMEntry;
+    }
+
+    void setSavedStackPointerAtVMEntry(void* stackPointerAtVMEntry)
+    {
+        m_savedStackPointerAtVMEntry = stackPointerAtVMEntry;
+    }
+
+    void* savedLastStackTop()
+    {
+        return m_savedLastStackTop;
+    }
+
+    void setSavedLastStackTop(void* lastStackTop)
+    {
+        m_savedLastStackTop = lastStackTop;
+    }
+
+    size_t savedReservedZoneSize()
+    {
+        return m_savedReservedZoneSize;
+    }
+
+    void setSavedReservedZoneSize(size_t reservedZoneSize)
+    {
+        m_savedReservedZoneSize = reservedZoneSize;
+    }
+
     void* m_apiData;
 
 private:
@@ -118,6 +148,9 @@
 #if ENABLE(STACK_STATS)
     StackStats::PerThreadStats m_stackStats;
 #endif
+    void* m_savedStackPointerAtVMEntry;
+    void* m_savedLastStackTop;
+    size_t m_savedReservedZoneSize;
 
     static WTF_EXPORTDATA ThreadSpecific<WTFThreadData>* staticData;
     friend WTFThreadData& wtfThreadData();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to