TM: Out of memory error with -j for microbenchmark

RESOLVED WORKSFORME

Status

()

Core
JavaScript Engine
RESOLVED WORKSFORME
9 years ago
7 years ago

People

(Reporter: Gregor Wagner, Unassigned)

Tracking

Firefox Tracking Flags

(Not tracked)

Details

(Reporter)

Description

9 years ago
Following microbenchmark generates an out of memory error with JIT enabled.

var t0 = new Date;

for(var i=0;i<10000000;i++)
    new Date;

print(new Date - t0);



host-6-16:src mozilla$ ./OPT.OBJ/js -j ./date.js 
./date.js:4: out of memory
./date.js:4: out of memory
./date.js:4: out of memory
./date.js:4: out of memory
./date.js:4: out of memory
./date.js:4: out of memory
4164
host-6-16:src mozilla$ ./OPT.OBJ/js ./date.js 
6741
Is this a regression from the fix for bug 505612 ? If so, please note that this bug blocks that bug.

/be

Comment 2

9 years ago
Seems to work in the browser. Gregor, can you confirm? (try javascript: for(var i=0;i<10000000;i++) new Date; in the url bar).

Comment 3

9 years ago
Breakpoint 2, js_ReportOutOfMemory (cx=0x2009800) at ../jscntxt.cpp:1297
1297        if (JS_ON_TRACE(cx) && !cx->bailExit)
(gdb) bt 5
#0  js_ReportOutOfMemory (cx=0x2009800) at ../jscntxt.cpp:1297
#1  0x0002a542 in RefillDoubleFreeList (cx=0x2009800) at ../jsgc.cpp:2087
#2  0x0002a916 in js_NewDoubleInRootedValue (cx=0x2009800, d=0, vp=0xbfffc608) at ../jsgc.cpp:2193
#3  0x0002a993 in js_NewWeaklyRootedDouble (cx=0x2009800, d=0) at ../jsgc.cpp:2213
#4  0x000b6ea3 in date_constructor (cx=0x2009800, obj=0x5c206a0) at ../jsdate.cpp:2099
(More stack frames follow...)
(gdb) bt 8
#0  js_ReportOutOfMemory (cx=0x2009800) at ../jscntxt.cpp:1297
#1  0x0002a542 in RefillDoubleFreeList (cx=0x2009800) at ../jsgc.cpp:2087
#2  0x0002a916 in js_NewDoubleInRootedValue (cx=0x2009800, d=0, vp=0xbfffc608) at ../jsgc.cpp:2193
#3  0x0002a993 in js_NewWeaklyRootedDouble (cx=0x2009800, d=0) at ../jsgc.cpp:2213
#4  0x000b6ea3 in date_constructor (cx=0x2009800, obj=0x5c206a0) at ../jsdate.cpp:2099
#5  0x000b6f3c in js_Date (cx=0x2009800, obj=0x5c206a0, argc=0, argv=0xbfffc710, rval=0xbfffc72c) at ../jsdate.cpp:2121
#6  0x009aef68 in ?? ()
#7  0xbfffed78 in ?? ()
(More stack frames follow...)
(gdb) n
1302        JSErrorReporter onError = cx->errorReporter;
(gdb) s
1306            js_GetLocalizedErrorMessage(cx, NULL, NULL, JSMSG_OUT_OF_MEMORY);
(gdb) p cx->bailExit
$1 = (VMSideExit *) 0x9ad2cc
(gdb) p cx->runtime->threadData.traceMonitor.tracecx
$2 = (JSContext *) 0x2009800

So we're not returning early in js_ReportOutOfMemory via the tracing condition:

1294      * If we are in a builtin called directly from trace, don't report an
1295      * error. We will retry in the interpreter instead.
1296      */
1297     if (JS_ON_TRACE(cx) && !cx->bailExit)
1298         return;
(Reporter)

Comment 4

9 years ago
Yeah it works in the browser.

(In reply to comment #2)
> Seems to work in the browser. Gregor, can you confirm? (try javascript: for(var
> i=0;i<10000000;i++) new Date; in the url bar).

Comment 5

9 years ago
The browser calls MaybeGC. That avoids it. We still have to fix the stack trace waldo posted though to make sure last ditch gets it.

Comment 6

9 years ago
http://hg.mozilla.org/mozilla-central/rev/3fb63f9f32ec
Status: NEW → RESOLVED
Last Resolved: 9 years ago
Resolution: --- → FIXED

Comment 7

9 years ago
oops, wrong bug number in the checkin comment for that changeset
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
No OOM with Interp, TM, JM, or JM+TI with a current JS shell.
Status: REOPENED → RESOLVED
Last Resolved: 9 years ago7 years ago
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.