Removed HeapTimer::synchronize
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Apr 2013 21:55:22 +0000 (21:55 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Apr 2013 21:55:22 +0000 (21:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=114832

Reviewed by Mark Hahnenberg.

HeapTimer::synchronize was a flawed attempt to make HeapTimer thread-safe.
Instead, we use proper locking now.

This is a slight API change, since the GC timer will now only fire in the
run loop that created the JS VM, even if another run loop later executes
some JS.

* API/APIShims.h:
(JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
* heap/HeapTimer.cpp:
(JSC):
* heap/HeapTimer.h:
(HeapTimer):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@148704 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/API/APIShims.h
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/heap/HeapTimer.cpp
Source/JavaScriptCore/heap/HeapTimer.h

index d765cca..d8e1fb7 100644 (file)
@@ -42,8 +42,6 @@ protected:
     {
         if (registerThread)
             vm->heap.machineThreads().addCurrentThread();
-        m_vm->heap.activityCallback()->synchronize();
-        m_vm->heap.sweeper()->synchronize();
     }
 
     ~APIEntryShimWithoutLock()
index f1330ed..2370c7c 100644 (file)
@@ -1,3 +1,24 @@
+2013-04-18  Geoffrey Garen  <ggaren@apple.com>
+
+        Removed HeapTimer::synchronize
+        https://bugs.webkit.org/show_bug.cgi?id=114832
+
+        Reviewed by Mark Hahnenberg.
+
+        HeapTimer::synchronize was a flawed attempt to make HeapTimer thread-safe.
+        Instead, we use proper locking now.
+
+        This is a slight API change, since the GC timer will now only fire in the
+        run loop that created the JS VM, even if another run loop later executes
+        some JS.
+
+        * API/APIShims.h:
+        (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+        * heap/HeapTimer.cpp:
+        (JSC):
+        * heap/HeapTimer.h:
+        (HeapTimer):
+
 2013-04-17  Geoffrey Garen  <ggaren@apple.com>
 
         Renamed JSGlobalData to VM
index 00c36be..d3676ba 100644 (file)
@@ -75,15 +75,6 @@ HeapTimer::~HeapTimer()
     CFRunLoopTimerInvalidate(m_timer.get());
 }
 
-void HeapTimer::synchronize()
-{
-    if (CFRunLoopGetCurrent() == m_runLoop.get())
-        return;
-    CFRunLoopRemoveTimer(m_runLoop.get(), m_timer.get(), kCFRunLoopCommonModes);
-    m_runLoop = CFRunLoopGetCurrent();
-    CFRunLoopAddTimer(m_runLoop.get(), m_timer.get(), kCFRunLoopCommonModes);
-}
-
 void HeapTimer::timerDidFire(CFRunLoopTimerRef timer, void* context)
 {
     JSLock* apiLock = static_cast<JSLock*>(context);
@@ -132,10 +123,6 @@ void HeapTimer::timerDidFire()
     doWork();
 }
 
-void HeapTimer::synchronize()
-{
-}
-
 void HeapTimer::invalidate()
 {
 }
@@ -178,18 +165,6 @@ void HeapTimer::customEvent(QEvent*)
     m_newThread = 0;
 }
 
-void HeapTimer::synchronize()
-{
-    if (thread() != QThread::currentThread()) {
-        // We can only move from the objects own thread to another, so we fire an
-        // event into the owning thread to trigger the move.
-        // This must be processed before any timerEvents so giving it high priority.
-        QMutexLocker lock(&m_mutex);
-        m_newThread = QThread::currentThread();
-        QCoreApplication::postEvent(this, new QEvent(QEvent::User), Qt::HighEventPriority);
-    }
-}
-
 #else
 HeapTimer::HeapTimer(VM* vm)
     : m_vm(vm)
@@ -200,10 +175,6 @@ HeapTimer::~HeapTimer()
 {
 }
 
-void HeapTimer::synchronize()
-{
-}
-
 void HeapTimer::invalidate()
 {
 }
index 99d3eac..be53436 100644 (file)
@@ -58,8 +58,6 @@ public:
 #endif
     
     virtual ~HeapTimer();
-
-    virtual void synchronize();
     virtual void doWork() = 0;
     
 protected: