зеркало из https://github.com/mozilla/gecko-dev.git
Fix so last-ditch GC doesn't collect script filenames (291312, r=shaver, a=me).
This commit is contained in:
Родитель
30ec9dcedb
Коммит
551d78d209
|
@ -1680,6 +1680,9 @@ restart:
|
||||||
JS_DHashTableEnumerate(rt->gcLocksHash, gc_lock_marker, cx);
|
JS_DHashTableEnumerate(rt->gcLocksHash, gc_lock_marker, cx);
|
||||||
js_MarkAtomState(&rt->atomState, gcflags, gc_mark_atom_key_thing, cx);
|
js_MarkAtomState(&rt->atomState, gcflags, gc_mark_atom_key_thing, cx);
|
||||||
js_MarkWatchPoints(rt);
|
js_MarkWatchPoints(rt);
|
||||||
|
if (gcflags & GC_KEEP_ATOMS)
|
||||||
|
js_MarkScriptFilenames(rt);
|
||||||
|
|
||||||
iter = NULL;
|
iter = NULL;
|
||||||
while ((acx = js_ContextIterator(rt, JS_TRUE, &iter)) != NULL) {
|
while ((acx = js_ContextIterator(rt, JS_TRUE, &iter)) != NULL) {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1033,6 +1033,23 @@ js_MarkScriptFilename(const char *filename)
|
||||||
sfe->mark = JS_TRUE;
|
sfe->mark = JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JS_STATIC_DLL_CALLBACK(intN)
|
||||||
|
js_script_filename_marker(JSHashEntry *he, intN i, void *arg)
|
||||||
|
{
|
||||||
|
ScriptFilenameEntry *sfe = (ScriptFilenameEntry *) he;
|
||||||
|
|
||||||
|
sfe->mark = JS_TRUE;
|
||||||
|
return HT_ENUMERATE_NEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
js_MarkScriptFilenames(JSRuntime *rt)
|
||||||
|
{
|
||||||
|
JS_HashTableEnumerateEntries(rt->scriptFilenameTable,
|
||||||
|
js_script_filename_marker,
|
||||||
|
rt);
|
||||||
|
}
|
||||||
|
|
||||||
JS_STATIC_DLL_CALLBACK(intN)
|
JS_STATIC_DLL_CALLBACK(intN)
|
||||||
js_script_filename_sweeper(JSHashEntry *he, intN i, void *arg)
|
js_script_filename_sweeper(JSHashEntry *he, intN i, void *arg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -114,6 +114,9 @@ js_SaveScriptFilename(JSContext *cx, const char *filename);
|
||||||
extern void
|
extern void
|
||||||
js_MarkScriptFilename(const char *filename);
|
js_MarkScriptFilename(const char *filename);
|
||||||
|
|
||||||
|
extern void
|
||||||
|
js_MarkScriptFilenames(JSRuntime *rt);
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
js_SweepScriptFilenames(JSRuntime *rt);
|
js_SweepScriptFilenames(JSRuntime *rt);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче