aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorPatrik Nyblom <[email protected]>2013-06-06 08:20:20 +0200
committerPatrik Nyblom <[email protected]>2013-06-06 08:20:20 +0200
commit2b4707d10b6ea5656242f5ae8506969c921ac841 (patch)
tree42f6bf3ba325f2d7a31734aea591a9c80c50a6a3 /erts
parente967d253c637f599b9f9237b605bc9c066032b41 (diff)
downloadotp-2b4707d10b6ea5656242f5ae8506969c921ac841.tar.gz
otp-2b4707d10b6ea5656242f5ae8506969c921ac841.tar.bz2
otp-2b4707d10b6ea5656242f5ae8506969c921ac841.zip
Teach erl_gc:offset_rootset about extra_root
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/beam/erl_gc.c6
-rw-r--r--erts/emulator/beam/external.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index da0f46e556..7b463958d2 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -2555,6 +2555,12 @@ offset_one_rootset(Process *p, Sint offs, char* area, Uint area_size,
p->dictionary->used,
offs, area, area_size);
}
+ if (p->extra_root != NULL) {
+ offset_heap_ptr(p->extra_root->objv,
+ p->extra_root->sz,
+ offs, area, area_size);
+ }
+
offset_heap_ptr(&p->fvalue, 1, offs, area, area_size);
offset_heap_ptr(&p->ftrace, 1, offs, area, area_size);
offset_heap_ptr(&p->seq_trace_token, 1, offs, area, area_size);
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index 8a1e89afb4..de2aacfa7b 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -2149,7 +2149,7 @@ enc_term_int(Process *p,ErtsAtomCacheMap *acmp, Eterm obj, byte* ep, Uint32 dfla
ESTACK_PUSH(s,obj); /* push back current object, to be popped on restore */
WSTACK_PUSH(com,((UWord) ep));
if (p->extra_root == NULL) {
- /* NB. Allocate an arroy of two "extra-roots", of which only the first element
+ /* NB. Allocate an array of two "extra-roots", of which only the first element
is seen and handled by the GC. Index 1 holds the Wstack. */
p->extra_root = erts_alloc(ERTS_ALC_T_EXTRA_ROOT, sizeof(ErlExtraRootSet)*2);
p->extra_root->objv = NULL;