From 54c0337374bc554941a6bef45563c821fbf2a1bd Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Wed, 22 Feb 2017 13:39:53 +0100 Subject: [PATCH] Backed out changeset f2019fbd6f8c (bug 1341326) for failing backup-point-bug1315634.js and more on arm. r=backout --- js/src/jit-test/tests/basic/bug1341326.js | 15 --------------- js/src/threading/posix/Thread.cpp | 2 -- js/src/threading/windows/Thread.cpp | 2 -- js/src/vm/HelperThreads.cpp | 13 ++++++++++--- js/src/vm/HelperThreads.h | 2 +- 5 files changed, 11 insertions(+), 23 deletions(-) delete mode 100644 js/src/jit-test/tests/basic/bug1341326.js diff --git a/js/src/jit-test/tests/basic/bug1341326.js b/js/src/jit-test/tests/basic/bug1341326.js deleted file mode 100644 index 9e7fdd4d602f..000000000000 --- a/js/src/jit-test/tests/basic/bug1341326.js +++ /dev/null @@ -1,15 +0,0 @@ -if (helperThreadCount() == 0) - quit(); -function eval(source) { - offThreadCompileModule(source); -} -var N = 10000; -var left = repeat_str('(1&', N); -var right = repeat_str(')', N); -var str = 'actual = '.concat(left, '1', right, ';'); -eval(str); -function repeat_str(str, repeat_count) { - var arr = new Array(--repeat_count); - while (repeat_count != 0) arr[--repeat_count] = str; - return str.concat.apply(str, arr); -} diff --git a/js/src/threading/posix/Thread.cpp b/js/src/threading/posix/Thread.cpp index c0a69b586b16..2572cc72794c 100644 --- a/js/src/threading/posix/Thread.cpp +++ b/js/src/threading/posix/Thread.cpp @@ -78,7 +78,6 @@ js::Thread::Thread(Thread&& aOther) { id_ = aOther.id_; aOther.id_ = Id(); - options_ = aOther.options_; } js::Thread& @@ -87,7 +86,6 @@ js::Thread::operator=(Thread&& aOther) MOZ_RELEASE_ASSERT(!joinable()); id_ = aOther.id_; aOther.id_ = Id(); - options_ = aOther.options_; return *this; } diff --git a/js/src/threading/windows/Thread.cpp b/js/src/threading/windows/Thread.cpp index 9b5298cfeab9..29e8b16a1129 100644 --- a/js/src/threading/windows/Thread.cpp +++ b/js/src/threading/windows/Thread.cpp @@ -59,7 +59,6 @@ js::Thread::Thread(Thread&& aOther) { id_ = aOther.id_; aOther.id_ = Id(); - options_ = aOther.options_; } js::Thread& @@ -68,7 +67,6 @@ js::Thread::operator=(Thread&& aOther) MOZ_RELEASE_ASSERT(!joinable()); id_ = aOther.id_; aOther.id_ = Id(); - options_ = aOther.options_; return *this; } diff --git a/js/src/vm/HelperThreads.cpp b/js/src/vm/HelperThreads.cpp index 2f7fcd75dcc5..b23aae2ffc8e 100644 --- a/js/src/vm/HelperThreads.cpp +++ b/js/src/vm/HelperThreads.cpp @@ -1663,7 +1663,7 @@ JSContext::addPendingOutOfMemory() } void -HelperThread::handleParseWorkload(AutoLockHelperThreadState& locked) +HelperThread::handleParseWorkload(AutoLockHelperThreadState& locked, uintptr_t stackLimit) { MOZ_ASSERT(HelperThreadState().canStartParseTask(locked)); MOZ_ASSERT(idle()); @@ -1903,7 +1903,14 @@ HelperThread::threadLoop() oomUnsafe.crash("HelperThread cx.init()"); } cx.setHelperThread(this); - JS_SetNativeStackQuota(&cx, HELPER_STACK_QUOTA); + + // Compute the thread's stack limit, for over-recursed checks. + uintptr_t stackLimit = GetNativeStackBase(); +#if JS_STACK_GROWTH_DIRECTION > 0 + stackLimit += HELPER_STACK_QUOTA; +#else + stackLimit -= HELPER_STACK_QUOTA; +#endif while (true) { MOZ_ASSERT(idle()); @@ -1939,7 +1946,7 @@ HelperThread::threadLoop() handlePromiseTaskWorkload(lock); } else if (HelperThreadState().canStartParseTask(lock)) { js::oom::SetThreadType(js::oom::THREAD_TYPE_PARSE); - handleParseWorkload(lock); + handleParseWorkload(lock, stackLimit); } else if (HelperThreadState().canStartCompressionTask(lock)) { js::oom::SetThreadType(js::oom::THREAD_TYPE_COMPRESS); handleCompressionWorkload(lock); diff --git a/js/src/vm/HelperThreads.h b/js/src/vm/HelperThreads.h index e7f3f1cfe880..51b1be1e5a50 100644 --- a/js/src/vm/HelperThreads.h +++ b/js/src/vm/HelperThreads.h @@ -384,7 +384,7 @@ struct HelperThread void handleWasmWorkload(AutoLockHelperThreadState& locked); void handlePromiseTaskWorkload(AutoLockHelperThreadState& locked); void handleIonWorkload(AutoLockHelperThreadState& locked); - void handleParseWorkload(AutoLockHelperThreadState& locked); + void handleParseWorkload(AutoLockHelperThreadState& locked, uintptr_t stackLimit); void handleCompressionWorkload(AutoLockHelperThreadState& locked); void handleGCHelperWorkload(AutoLockHelperThreadState& locked); void handleGCParallelWorkload(AutoLockHelperThreadState& locked);