mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
bug 560471 - followup to fix restoration of weak roots
This commit is contained in:
parent
27452b9484
commit
45a0a3043e
@ -1710,16 +1710,21 @@ class AutoGCRooter {
|
||||
void operator=(AutoGCRooter &ida);
|
||||
};
|
||||
|
||||
class AutoSaveWeakRoots : private AutoGCRooter
|
||||
class AutoSaveRestoreWeakRoots : private AutoGCRooter
|
||||
{
|
||||
public:
|
||||
explicit AutoSaveWeakRoots(JSContext *cx
|
||||
explicit AutoSaveRestoreWeakRoots(JSContext *cx
|
||||
JS_GUARD_OBJECT_NOTIFIER_PARAM)
|
||||
: AutoGCRooter(cx, WEAKROOTS), savedRoots(cx->weakRoots)
|
||||
{
|
||||
JS_GUARD_OBJECT_NOTIFIER_INIT;
|
||||
}
|
||||
|
||||
~AutoSaveRestoreWeakRoots()
|
||||
{
|
||||
context->weakRoots = savedRoots;
|
||||
}
|
||||
|
||||
friend void AutoGCRooter::trace(JSTracer *trc);
|
||||
|
||||
private:
|
||||
|
@ -78,7 +78,7 @@ AutoGCRooter::trace(JSTracer *trc)
|
||||
return;
|
||||
|
||||
case WEAKROOTS:
|
||||
static_cast<AutoSaveWeakRoots *>(this)->savedRoots.mark(trc);
|
||||
static_cast<AutoSaveRestoreWeakRoots *>(this)->savedRoots.mark(trc);
|
||||
return;
|
||||
|
||||
case PARSER:
|
||||
|
@ -1408,7 +1408,7 @@ LastDitchGC(JSContext *cx)
|
||||
JS_ASSERT(!JS_ON_TRACE(cx));
|
||||
|
||||
/* The last ditch GC preserves weak roots and all atoms. */
|
||||
AutoSaveWeakRoots save(cx);
|
||||
AutoSaveRestoreWeakRoots save(cx);
|
||||
AutoKeepAtoms keep(cx->runtime);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user