зеркало из https://github.com/mozilla/gecko-dev.git
Re-init pinned atoms after 1=>0=>1 contexts-in-runtime transition (80619, sr=jband&shaver).
This commit is contained in:
Родитель
985c1217d8
Коммит
1f8f87f711
|
@ -217,8 +217,6 @@ static JSHashAllocOps atom_alloc_ops = {
|
|||
JSBool
|
||||
js_InitAtomState(JSContext *cx, JSAtomState *state)
|
||||
{
|
||||
uintN i;
|
||||
|
||||
state->runtime = cx->runtime;
|
||||
state->table = JS_NewHashTable(JS_ATOM_HASH_SIZE, js_hash_atom_key,
|
||||
js_compare_atom_keys, js_compare_stub,
|
||||
|
@ -232,10 +230,22 @@ js_InitAtomState(JSContext *cx, JSAtomState *state)
|
|||
state->tablegen = 0;
|
||||
#endif
|
||||
|
||||
if (!js_InitPinnedAtoms(cx, state)) {
|
||||
js_FreeAtomState(cx, state);
|
||||
return JS_FALSE;
|
||||
}
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
JSBool
|
||||
js_InitPinnedAtoms(JSContext *cx, JSAtomState *state)
|
||||
{
|
||||
uintN i;
|
||||
|
||||
#define FROB(lval,str) \
|
||||
JS_BEGIN_MACRO \
|
||||
if (!(state->lval = js_Atomize(cx, str, strlen(str), ATOM_PINNED))) \
|
||||
goto bad; \
|
||||
return JS_FALSE; \
|
||||
JS_END_MACRO
|
||||
|
||||
JS_ASSERT(sizeof js_type_str / sizeof js_type_str[0] == JSTYPE_LIMIT);
|
||||
|
@ -286,10 +296,6 @@ js_InitAtomState(JSContext *cx, JSAtomState *state)
|
|||
#undef FROB
|
||||
|
||||
return JS_TRUE;
|
||||
|
||||
bad:
|
||||
js_FreeAtomState(cx, state);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
/* NB: cx unused; js_FinishAtomState calls us with null cx. */
|
||||
|
|
|
@ -268,6 +268,9 @@ js_MarkAtomState(JSAtomState *state, uintN gcflags, JSGCThingMarker mark,
|
|||
extern void
|
||||
js_SweepAtomState(JSAtomState *state);
|
||||
|
||||
extern JSBool
|
||||
js_InitPinnedAtoms(JSContext *cx, JSAtomState *state);
|
||||
|
||||
extern void
|
||||
js_UnpinPinnedAtoms(JSAtomState *state);
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ js_NewContext(JSRuntime *rt, size_t stackChunkSize)
|
|||
if (first) {
|
||||
ok = (rt->atomState.liveAtoms == 0)
|
||||
? js_InitAtomState(cx, &rt->atomState)
|
||||
: JS_TRUE;
|
||||
: js_InitPinnedAtoms(cx, &rt->atomState);
|
||||
if (ok)
|
||||
ok = js_InitScanner(cx);
|
||||
if (ok)
|
||||
|
|
Загрузка…
Ссылка в новой задаче