jsc tests should have timeouts
authorfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 5 Sep 2013 06:34:58 +0000 (06:34 +0000)
committerfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 5 Sep 2013 06:34:58 +0000 (06:34 +0000)
https://bugs.webkit.org/show_bug.cgi?id=120725

Source/JavaScriptCore:

Reviewed by Geoffrey Garen.

Add the timeout logic directly to 'jsc' because that's easier to do than
writing shell/perl code for it.

* jsc.cpp:
(timeoutThreadMain):
(main):

Tools:

Reviewed by Geoffrey Garen.

Set the timeout to 20 seconds per test for now.

* Scripts/run-javascriptcore-tests:

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/jsc.cpp
Tools/ChangeLog
Tools/Scripts/run-javascriptcore-tests

index 3a1fc24..acaa3fa 100644 (file)
@@ -1,5 +1,19 @@
 2013-09-04  Filip Pizlo  <fpizlo@apple.com>
 
+        jsc tests should have timeouts
+        https://bugs.webkit.org/show_bug.cgi?id=120725
+
+        Reviewed by Geoffrey Garen.
+        
+        Add the timeout logic directly to 'jsc' because that's easier to do than
+        writing shell/perl code for it.
+
+        * jsc.cpp:
+        (timeoutThreadMain):
+        (main):
+
+2013-09-04  Filip Pizlo  <fpizlo@apple.com>
+
         fast/js/dfg-* tests should wait for the concurrent JIT
         https://bugs.webkit.org/show_bug.cgi?id=120723
 
index ad037ca..c1a2cb8 100644 (file)
@@ -518,6 +518,23 @@ EncodedJSValue JSC_HOST_CALL functionQuit(ExecState*)
 
 int jscmain(int argc, char** argv);
 
+static double s_desiredTimeout;
+static double s_timeToWake;
+
+static NO_RETURN_DUE_TO_CRASH void timeoutThreadMain(void*)
+{
+    // WTF doesn't provide for a portable sleep(), so we use the ThreadCondition, which
+    // is close enough.
+    Mutex mutex;
+    ThreadCondition condition;
+    mutex.lock();
+    while (currentTime() < s_timeToWake)
+        condition.timedWait(mutex, s_timeToWake);
+    
+    dataLog("Timed out after ", s_desiredTimeout, " seconds!\n");
+    CRASH();
+}
+
 int main(int argc, char** argv)
 {
 #if PLATFORM(IOS)
@@ -566,6 +583,17 @@ int main(int argc, char** argv)
     WTF::initializeMainThread();
 #endif
     JSC::initializeThreading();
+    
+    if (char* timeoutString = getenv("JSC_timeout")) {
+        if (sscanf(timeoutString, "%lf", &s_desiredTimeout) != 1) {
+            dataLog(
+                "WARNING: timeout string is malformed, got ", timeoutString,
+                " but expected a number. Not using a timeout.\n");
+        } else {
+            s_timeToWake = currentTime() + s_desiredTimeout;
+            createThread(timeoutThreadMain, 0, "jsc Timeout Thread");
+        }
+    }
 
     // We can't use destructors in the following code because it uses Windows
     // Structured Exception Handling
index f31a848..30b0977 100644 (file)
@@ -1,5 +1,16 @@
 2013-09-04  Filip Pizlo  <fpizlo@apple.com>
 
+        jsc tests should have timeouts
+        https://bugs.webkit.org/show_bug.cgi?id=120725
+
+        Reviewed by Geoffrey Garen.
+        
+        Set the timeout to 20 seconds per test for now.
+
+        * Scripts/run-javascriptcore-tests:
+
+2013-09-04  Filip Pizlo  <fpizlo@apple.com>
+
         run-javascriptcore-tests should run-fast-jsc as well
         https://bugs.webkit.org/show_bug.cgi?id=120722
 
index 0b058fe..0e8507f 100755 (executable)
@@ -115,6 +115,7 @@ if (!defined($root) && $buildJSC) {
 
 my $productDir = jscProductDir();
 $ENV{DYLD_FRAMEWORK_PATH} = $productDir;
+$ENV{JSC_timeout} = 20; # Set a 20 second timeout on all jsc tests.
 setPathForRunningWebKitApp(\%ENV) if isCygwin();
 
 sub testapiPath($)