Crash in SWServerJobQueue::runNextJobSynchronously
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Feb 2019 05:05:03 +0000 (05:05 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Feb 2019 05:05:03 +0000 (05:05 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194974

Reviewed by Geoffrey Garen.

We suspect the crash is happening due to m_jobQueue being empty in runNextJobSynchronously
or there is a timer heap corruption again :(

Exit early when m_jobQueue is empty. Also add a debug assert that this should never happen
but convert an existing release assert to a debug assert since this appears to be hitting
too frequently in wild.

* workers/service/server/SWServerJobQueue.cpp:
(WebCore::SWServerJobQueue::runNextJobSynchronously):

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

Source/WebCore/ChangeLog
Source/WebCore/workers/service/server/SWServerJobQueue.cpp

index 204fb6e..d86be8d 100644 (file)
@@ -1,3 +1,20 @@
+2019-02-22  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Crash in SWServerJobQueue::runNextJobSynchronously
+        https://bugs.webkit.org/show_bug.cgi?id=194974
+
+        Reviewed by Geoffrey Garen.
+
+        We suspect the crash is happening due to m_jobQueue being empty in runNextJobSynchronously
+        or there is a timer heap corruption again :(
+
+        Exit early when m_jobQueue is empty. Also add a debug assert that this should never happen
+        but convert an existing release assert to a debug assert since this appears to be hitting
+        too frequently in wild.
+
+        * workers/service/server/SWServerJobQueue.cpp:
+        (WebCore::SWServerJobQueue::runNextJobSynchronously):
+
 2019-02-22  Simon Fraser  <simon.fraser@apple.com>
 
         Clean up the setScrollPosition/setScrollPositionWithoutContentEdgeConstraints confusion in the scrolling tree nodes
index 39d7d3e..0eccbc9 100644 (file)
@@ -234,6 +234,10 @@ void SWServerJobQueue::runNextJob()
 
 void SWServerJobQueue::runNextJobSynchronously()
 {
+    ASSERT(!m_jobQueue.isEmpty());
+    if (m_jobQueue.isEmpty())
+        return;
+
     auto& job = firstJob();
     switch (job.type) {
     case ServiceWorkerJobType::Register:
@@ -247,7 +251,7 @@ void SWServerJobQueue::runNextJobSynchronously()
         return;
     }
 
-    RELEASE_ASSERT_NOT_REACHED();
+    ASSERT_NOT_REACHED();
 }
 
 // https://w3c.github.io/ServiceWorker/#register-algorithm