Closed Bug 762618 Opened 12 years ago Closed 11 years ago

Some tests hang on "Internal Error: too much recursion" when built in certain environments

Categories

(Toolkit :: Add-ons Manager, defect)

x86_64
Linux
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla26

People

(Reporter: jcranmer, Assigned: Irving)

References

Details

Attachments

(2 files)

The actual test that fails the most reliably for me is toolkit/mozapps/extensions/test/test_startup.js, although the error is as follows: *** ERROR addons.manager: Exception calling provider getAddonByID: InternalError: too much recursion [the provider in this case is XPIProvider.jsm]. I did this by building thunderibrd with: --enable-application=mail --disable-debug --enable-optimization='g' --enable-tests --enable-chrome-format=flat along with the second patch in bug 750364 (attachment 631064 [details] [diff] [review]).
I got the same problem with test_startup.js as well as test_install.js and I'm building Firefox with --disable-debug --disable-optimize.
Well, I'm rather stumped with this one... (In reply to Christian Holler (:decoder) from comment #1) > I got the same problem with test_startup.js as well as test_install.js and > I'm building Firefox with --disable-debug --disable-optimize. Also Linux? Anything useful in the log?
I don't have a log of the file on hand, but <https://tbpl.mozilla.org/php/getParsedLog.php?id=14646484&tree=Try&full=1> is a tinderbox log of the failure (Linux x86-64). Given that --enable-debug and --enable-optimize both work, I suspect that JS stacks are roomier in debug builds?
This is the full log I had: TEST-INFO | (xpcshell/head.js) | test 1 pending TEST-INFO | (xpcshell/head.js) | test 2 pending *** LOG addons.manager: Application has been upgraded *** LOG addons.xpi: startup *** LOG addons.xpi: checkForChanges *** LOG addons.xpi: No changes found *** LOG addons.manager: shutdown *** LOG addons.xpi: shutdown *** LOG addons.xpi-utils: shutdown *** LOG addons.xpi: startup *** LOG addons.xpi: checkForChanges *** LOG addons.xpi: No changes found TEST-PASS | /tmp/code-coverage/mozilla/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js | [null : 29] 5 == 5 TEST-PASS | /tmp/code-coverage/mozilla/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js | [null : 32] 0 == 0 *** LOG addons.manager: shutdown *** LOG addons.xpi: shutdown *** LOG addons.xpi-utils: shutdown *** LOG addons.xpi: startup *** LOG addons.xpi: checkForChanges *** LOG addons.xpi: No changes found TEST-PASS | /tmp/code-coverage/mozilla/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js | [null : 45] 5 == 5 *** LOG addons.manager: shutdown *** LOG addons.xpi: shutdown *** LOG addons.xpi-utils: shutdown *** LOG addons.xpi: startup *** LOG addons.xpi: checkForChanges *** LOG addons.xpi: No changes found TEST-PASS | /tmp/code-coverage/mozilla/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js | [null : 55] 5 == 5 *** LOG addons.manager: shutdown *** WARN addons.manager: Exception calling callback: InternalError: too much recursion TEST-INFO | (xpcshell/head.js) | test 2 finished TEST-INFO | (xpcshell/head.js) | running event loop
Bug 733709 attachment 656221 [details] is the first example of this happening in the real world.
The full stack trace is ~128 function calls deep: formatLogMessage@resource://gre/modules/AddonLogging.jsm:27 AddonLogger.error@resource://gre/modules/AddonLogging.jsm:73 LogManager.getLogger/</aTarget[fname]@resource://gre/modules/AddonLogging.jsm:136 AMI_callProviders@resource://gre/modules/AddonManager.jsm:659 AMI_shutdown@resource://gre/modules/AddonManager.jsm:681 shutdownManager@/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/head_addons.js:407 @/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:56 safeCall@resource://gre/modules/AddonManager.jsm:78 AMI_getAddonsByTypes/<.noMoreObjects@resource://gre/modules/AddonManager.jsm:1752 AOC_callNext@resource://gre/modules/AddonManager.jsm:174 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 getAddonsByTypes_getVisibleAddons@resource://gre/modules/XPIProvider.jsm:3216 XPIDB_getVisibleAddons@resource://gre/modules/XPIProvider.jsm -> resource://gre/modules/XPIProviderUtils.js:1377 XPI_getAddonsByTypes@resource://gre/modules/XPIProvider.jsm:3215 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 PL_getAddonsByTypes@resource://gre/modules/PluginProvider.jsm:111 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 LightweightThemeManager.getAddonsByTypes@resource://gre/modules/LightweightThemeManager.jsm:378 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AsyncObjectCaller@resource://gre/modules/AddonManager.jsm:160 AMI_getAddonsByTypes@resource://gre/modules/AddonManager.jsm:1751 AM_getAddonsByTypes@resource://gre/modules/AddonManager.jsm:2253 run_test_3@/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:54 @/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:47 safeCall@resource://gre/modules/AddonManager.jsm:78 AMI_getAddonsByTypes/<.noMoreObjects@resource://gre/modules/AddonManager.jsm:1752 AOC_callNext@resource://gre/modules/AddonManager.jsm:174 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 getAddonsByTypes_getVisibleAddons@resource://gre/modules/XPIProvider.jsm:3216 XPIDB_getVisibleAddons@resource://gre/modules/XPIProvider.jsm -> resource://gre/modules/XPIProviderUtils.js:1377 XPI_getAddonsByTypes@resource://gre/modules/XPIProvider.jsm:3215 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 PL_getAddonsByTypes@resource://gre/modules/PluginProvider.jsm:111 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 LightweightThemeManager.getAddonsByTypes@resource://gre/modules/LightweightThemeManager.jsm:378 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AsyncObjectCaller@resource://gre/modules/AddonManager.jsm:160 AMI_getAddonsByTypes@resource://gre/modules/AddonManager.jsm:1751 AM_getAddonsByTypes@resource://gre/modules/AddonManager.jsm:2253 run_test_2@/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:44 @/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:34 safeCall@resource://gre/modules/AddonManager.jsm:78 AMI_getAddonsWithOperationsByTypes/<.noMoreObjects@resource://gre/modules/AddonManager.jsm:1811 AOC_callNext@resource://gre/modules/AddonManager.jsm:174 AMI_getAddonsWithOperationsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1806 getAddonsWithOpsByTypes_getVisibleAddonsWithPendingOps@resource://gre/modules/XPIProvider.jsm:3255 XPIDB_getVisibleAddonsWithPendingOperations@resource://gre/modules/XPIProvider.jsm -> resource://gre/modules/XPIProviderUtils.js:1455 XPI_getAddonsWithOperationsByTypes@resource://gre/modules/XPIProvider.jsm:3248 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsWithOperationsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1804 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsWithOperationsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1806 PL_getAddonsWithOperationsByTypes@resource://gre/modules/PluginProvider.jsm:123 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsWithOperationsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1804 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AOC_callNext@resource://gre/modules/AddonManager.jsm:182 AsyncObjectCaller@resource://gre/modules/AddonManager.jsm:160 AMI_getAddonsWithOperationsByTypes@resource://gre/modules/AddonManager.jsm:1810 AM_getAddonsWithOperationsByTypes@resource://gre/modules/AddonManager.jsm:2249 @/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:31 safeCall@resource://gre/modules/AddonManager.jsm:78 AMI_getAddonsByTypes/<.noMoreObjects@resource://gre/modules/AddonManager.jsm:1752 AOC_callNext@resource://gre/modules/AddonManager.jsm:174 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 getAddonsByTypes_getVisibleAddons@resource://gre/modules/XPIProvider.jsm:3216 XPIDB_getVisibleAddons@resource://gre/modules/XPIProvider.jsm -> resource://gre/modules/XPIProviderUtils.js:1377 XPI_getAddonsByTypes@resource://gre/modules/XPIProvider.jsm:3215 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 PL_getAddonsByTypes@resource://gre/modules/PluginProvider.jsm:111 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 LightweightThemeManager.getAddonsByTypes@resource://gre/modules/LightweightThemeManager.jsm:378 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AsyncObjectCaller@resource://gre/modules/AddonManager.jsm:160 AMI_getAddonsByTypes@resource://gre/modules/AddonManager.jsm:1751 AM_getAddonsByTypes@resource://gre/modules/AddonManager.jsm:2253 run_test_1@/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:28 @/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:21 safeCall@resource://gre/modules/AddonManager.jsm:78 AMI_getAddonsByTypes/<.noMoreObjects@resource://gre/modules/AddonManager.jsm:1752 AOC_callNext@resource://gre/modules/AddonManager.jsm:174 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 PL_getAddonsByTypes@resource://gre/modules/PluginProvider.jsm:111 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 LightweightThemeManager.getAddonsByTypes@resource://gre/modules/LightweightThemeManager.jsm:378 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AMI_getAddonsByTypes/<.nextObject/<@resource://gre/modules/AddonManager.jsm:1747 getAddonsByTypes_getVisibleAddons@resource://gre/modules/XPIProvider.jsm:3216 XPIDB_getVisibleAddons@resource://gre/modules/XPIProvider.jsm -> resource://gre/modules/XPIProviderUtils.js:1377 XPI_getAddonsByTypes@resource://gre/modules/XPIProvider.jsm:3215 callProvider@resource://gre/modules/AddonManager.jsm:105 AMI_getAddonsByTypes/<.nextObject@resource://gre/modules/AddonManager.jsm:1745 AOC_callNext@resource://gre/modules/AddonManager.jsm:180 AsyncObjectCaller@resource://gre/modules/AddonManager.jsm:160 AMI_getAddonsByTypes@resource://gre/modules/AddonManager.jsm:1751 AM_getAddonsByTypes@resource://gre/modules/AddonManager.jsm:2253 run_test@/src/branch/mozilla-coverage/obj-x86_64-unknown-linux-gnu/_tests/xpcshell/toolkit/mozapps/extensions/test/xpcshell/test_general.js:18 _execute_test@/src/branch/mozilla-coverage/testing/xpcshell/head.js:315 @-e:1
I'm tripping over this now, too. It's in the way of progress on bug 853388 (XPIDatabase sqlite=>JSON) because I can't get through the tests to see what I'm breaking.
Blocks: 853388
Changing gStackSize in nsJSEnvironment.cpp doesn't seem to make any difference (http://dxr.mozilla.org/mozilla-central/dom/base/nsJSEnvironment.cpp#l90); I get the same depth of JS stack when the exception is thrown even when gStackSize is 8x larger. When I catch this in the debugger, the C++ stack is 940 calls deep. The condition it's failing on is JS_CHECK_RECURSION (http://dxr.mozilla.org/mozilla-central/js/src/jsfriendapi.h#l573) which uses the limit set by JS_SetNativeStackQuota (http://dxr.mozilla.org/mozilla-central/js/src/jsapi.cpp#l3011); I'm not sure where that value comes from in xpcshell. At this point I'm going to have to disable this test in order to get other work done; let me know if you need me to reproduce the problem again. The top few recursion loops on the C++ stack look like: #0 0x0000000103f8530c in js_ReportOverRecursed(JSContext*) at /Users/ireid/tbird/mozilla-central/js/src/jscntxt.cpp:560 #1 0x00000001044c9a70 in CheckStackAndEnterMethodJIT(JSContext*, js::StackFrame*, void*, bool) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MethodJIT.cpp:1091 #2 0x00000001044c9a10 in js::mjit::JaegerShot(JSContext*, bool) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MethodJIT.cpp:1118 #3 0x00000001040a15f9 in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:2414 #4 0x000000010408efb5 in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:341 #5 0x00000001040a9a06 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:398 #6 0x0000000103fb7743 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:135 #7 0x0000000103ff2fd1 in js_fun_apply(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsfun.cpp:987 #8 0x00000001040a9822 in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:338 #9 0x00000001040a977d in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:384 #10 0x0000000103fb7743 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:135 #11 0x00000001040aa586 in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:431 #12 0x000000010416b2ae in js::DirectProxyHandler::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:485 #13 0x00000001042c5602 in js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jswrapper.cpp:487 #14 0x000000010417d5ed in js::Proxy::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:2629 #15 0x0000000104182b2e in proxy_Call(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:3197 #16 0x00000001040a954b in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:338 #17 0x00000001040a9488 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:377 #18 0x000000010409fdd4 in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:2357 #19 0x000000010408efb5 in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:341 #20 0x000000010460e7e1 in UncachedInlineCall(js::VMFrame&, js::InitialFrameFlags, void**, bool*, unsigned int) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/InvokeHelpers.cpp:396 #21 0x000000010460ed42 in js::mjit::stubs::UncachedCallHelper(js::VMFrame&, unsigned int, bool, js::mjit::stubs::UncachedCallResult&) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/InvokeHelpers.cpp:491 #22 0x00000001045d7c65 in js::mjit::CallCompiler::update() at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MonoIC.cpp:1276 #23 0x00000001045d4ce2 in js::mjit::ic::Call(js::VMFrame&, js::mjit::ic::CallICInfo*) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MonoIC.cpp:1359 #24 0x000000010cadd5b6 in 0x10cadd5b6 () #25 0x00000001044c96d7 in js::mjit::EnterMethodJIT(JSContext*, js::StackFrame*, void*, JS::Value*, bool) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MethodJIT.cpp:1042 #26 0x00000001044c9bea in CheckStackAndEnterMethodJIT(JSContext*, js::StackFrame*, void*, bool) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MethodJIT.cpp:1100 #27 0x00000001044c9a10 in js::mjit::JaegerShot(JSContext*, bool) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MethodJIT.cpp:1118 #28 0x000000010408ef8b in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:338 #29 0x00000001040a9a06 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:398 #30 0x0000000103fb7743 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:135 #31 0x00000001040aa586 in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:431 #32 0x000000010416b2ae in js::DirectProxyHandler::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:485 #33 0x00000001042c5602 in js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jswrapper.cpp:487 #34 0x000000010417d5ed in js::Proxy::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:2629 #35 0x0000000104182b2e in proxy_Call(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:3197 #36 0x00000001040a954b in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:338 #37 0x00000001040a9488 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:377 #38 0x000000010409fdd4 in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:2357 #39 0x000000010408efb5 in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:341 #40 0x00000001040a9a06 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:398 #41 0x0000000103fb7743 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:135 #42 0x0000000103ff2fd1 in js_fun_apply(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsfun.cpp:987 #43 0x00000001040a9822 in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:338 #44 0x00000001040a977d in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:384 #45 0x0000000103fb7743 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:135 #46 0x00000001040aa586 in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:431 #47 0x000000010416b2ae in js::DirectProxyHandler::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:485 #48 0x00000001042c5602 in js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jswrapper.cpp:487 #49 0x000000010417d5ed in js::Proxy::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:2629 #50 0x0000000104182b2e in proxy_Call(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:3197 #51 0x00000001040a954b in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:338 #52 0x00000001040a9488 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:377 #53 0x000000010409fdd4 in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:2357 #54 0x000000010408efb5 in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:341 #55 0x000000010460e7e1 in UncachedInlineCall(js::VMFrame&, js::InitialFrameFlags, void**, bool*, unsigned int) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/InvokeHelpers.cpp:396 #56 0x000000010460ed42 in js::mjit::stubs::UncachedCallHelper(js::VMFrame&, unsigned int, bool, js::mjit::stubs::UncachedCallResult&) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/InvokeHelpers.cpp:491 #57 0x00000001045d7c65 in js::mjit::CallCompiler::update() at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MonoIC.cpp:1276 #58 0x00000001045d4ce2 in js::mjit::ic::Call(js::VMFrame&, js::mjit::ic::CallICInfo*) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MonoIC.cpp:1359 #59 0x000000010cadd5b6 in 0x10cadd5b6 () #60 0x00000001044c96d7 in js::mjit::EnterMethodJIT(JSContext*, js::StackFrame*, void*, JS::Value*, bool) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MethodJIT.cpp:1042 #61 0x00000001044c9bea in CheckStackAndEnterMethodJIT(JSContext*, js::StackFrame*, void*, bool) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MethodJIT.cpp:1100 #62 0x00000001044c9a10 in js::mjit::JaegerShot(JSContext*, bool) at /Users/ireid/tbird/mozilla-central/js/src/methodjit/MethodJIT.cpp:1118 #63 0x000000010408ef8b in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:338 #64 0x00000001040a9a06 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:398 #65 0x0000000103fb7743 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:135 #66 0x00000001040aa586 in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:431 #67 0x000000010416b2ae in js::DirectProxyHandler::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:485 #68 0x00000001042c5602 in js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jswrapper.cpp:487 #69 0x000000010417d5ed in js::Proxy::call(JSContext*, JS::Handle<JSObject*>, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:2629 #70 0x0000000104182b2e in proxy_Call(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:3197
In case anyone needs a workaround, I'm using this patch to temporarily disable the hanging test.
Based on conversation with mjrosenb on IRC, I tried changing the xpcshell test harness to *not* supply the "method jit" -m argument to xpcshell. I'm still seeing stack overflows, with a characteristic repeating pattern including passes through CrossCompartmentWrapper #0 0x0000000103ebe6fc in js_ReportOverRecursed(JSContext*) at /Users/ireid/tbird/mozilla-central/js/src/jscntxt.cpp:543 #1 0x0000000103fe6581 in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:331 #2 0x0000000103fe654d in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:407 #3 0x0000000103fdca04 in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode, bool) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:2410 #4 0x0000000103fcb2ae in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:364 #5 0x0000000103fe67d6 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:421 #6 0x0000000103ef0773 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:134 #7 0x0000000103f2c7e1 in js_fun_apply(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsfun.cpp:1031 #8 0x0000000103fe65f2 in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:337 #9 0x0000000103fe654d in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:407 #10 0x0000000103fdca04 in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode, bool) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:2410 #11 0x0000000103fcb2ae in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:364 #12 0x0000000103fe67d6 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:421 #13 0x0000000103ef0773 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:134 #14 0x0000000103fe738b in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:454 #15 0x00000001040a98e5 in js::DirectProxyHandler::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:481 #16 0x0000000104206c0f in js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jswrapper.cpp:453 #17 0x00000001040bbc1a in js::Proxy::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:2613 #18 0x00000001040c1178 in proxy_Call(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:3177 #19 0x0000000103fe631b in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:337 #20 0x0000000103fe6258 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:400 #21 0x0000000103fdca04 in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode, bool) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:2410 #22 0x0000000103fcb2ae in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:364 #23 0x0000000103fe67d6 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:421 #24 0x0000000103ef0773 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:134 #25 0x0000000103f2c7e1 in js_fun_apply(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsfun.cpp:1031 #26 0x0000000103fe65f2 in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:337 #27 0x0000000103fe654d in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:407 #28 0x0000000103ef0773 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:134 #29 0x0000000103fe738b in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:454 #30 0x00000001040a98e5 in js::DirectProxyHandler::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:481 #31 0x0000000104206c0f in js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jswrapper.cpp:453 #32 0x00000001040bbc1a in js::Proxy::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:2613 #33 0x00000001040c1178 in proxy_Call(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:3177 #34 0x0000000103fe631b in js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [inlined] at /Users/ireid/tbird/mozilla-central/js/src/jscntxtinlines.h:337 #35 0x0000000103fe6258 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:400 #36 0x0000000103fdca04 in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode, bool) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:2410 #37 0x0000000103fcb2ae in js::RunScript(JSContext*, js::StackFrame*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:364 #38 0x0000000103fe67d6 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:421 #39 0x0000000103ef0773 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.h:134 #40 0x0000000103fe738b in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsinterp.cpp:454 #41 0x00000001040a98e5 in js::DirectProxyHandler::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:481 #42 0x0000000104206c0f in js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jswrapper.cpp:453 #43 0x00000001040bbc1a in js::Proxy::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:2613 #44 0x00000001040c1178 in proxy_Call(JSContext*, unsigned int, JS::Value*) at /Users/ireid/tbird/mozilla-central/js/src/jsproxy.cpp:3177
I'm still not convinced that we don't need to fix the JS interpreter, but it's clear that the AddonManager is particularly stack-unfriendly when addon providers call back synchronously on their sometimes-async APIs. I've been using this WIP patch to get through my test/debug cycle with fewer stack overflows. In the long run it should be replaced by something supported; at this point Promises or Async.jsm (https://mail.mozilla.org/pipermail/firefox-dev/2013-April/000268.html) seem like the most likely candidates.
As part of the work in Bug 853388, all the tests under toolkit/mozapps/extensions have been modified to shift work from callbacks onto later turns of the event loop, both to avoid many deadlock & correctness issues within the tests themselves, and to reduce stack use. If we're not seeing similar failures in other tests, can we close this bug?
Flags: needinfo?(Pidgeot18)
I kicked off a run of my coverage builds and stopped seeing this bug there, so I'm going to call this fixed by bug 853388.
Status: NEW → RESOLVED
Closed: 11 years ago
Flags: needinfo?(Pidgeot18)
Resolution: --- → FIXED
Assignee: nobody → irving
Target Milestone: --- → mozilla26
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: