Re-init pinned atoms after 1=>0=>1 contexts-in-runtime transition (80619, sr=jband&shaver).

This commit is contained in:
brendan%mozilla.org 2001-05-15 19:39:16 +00:00
Родитель 985c1217d8
Коммит 1f8f87f711
3 изменённых файлов: 17 добавлений и 8 удалений

Просмотреть файл

@ -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)