aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_node_tables.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2019-07-22 11:16:39 +0200
committerRickard Green <[email protected]>2019-07-22 11:16:39 +0200
commit97c7c0efdf994b7e1a6860c8f34af4b3474ec8ee (patch)
treedd913a588d7c97bf3db933ded6b7ee4a53d07c15 /erts/emulator/beam/erl_node_tables.c
parent3967d28c05dae77db30b15e56eb4ececf4f1afef (diff)
parentdda4dc0da4b89431a202b58427431de50c269861 (diff)
downloadotp-97c7c0efdf994b7e1a6860c8f34af4b3474ec8ee.tar.gz
otp-97c7c0efdf994b7e1a6860c8f34af4b3474ec8ee.tar.bz2
otp-97c7c0efdf994b7e1a6860c8f34af4b3474ec8ee.zip
Merge branch 'rickard/node-refc-tests-21' into rickard/node-refc-tests-22
* rickard/node-refc-tests-21: Node container refc test for persistent terms Include persistent term storage in node/dist refc check Fix node refc test for system message queue
Diffstat (limited to 'erts/emulator/beam/erl_node_tables.c')
-rw-r--r--erts/emulator/beam/erl_node_tables.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_node_tables.c b/erts/emulator/beam/erl_node_tables.c
index 4eb6c3e214..9cba707440 100644
--- a/erts/emulator/beam/erl_node_tables.c
+++ b/erts/emulator/beam/erl_node_tables.c
@@ -1188,6 +1188,7 @@ static Eterm AM_delayed_delete_timer;
static Eterm AM_thread_progress_delete_timer;
static Eterm AM_sequence;
static Eterm AM_signal;
+static Eterm AM_persistent_term;
static void setup_reference_table(void);
static Eterm reference_table_term(Uint **hpp, ErlOffHeap *ohp, Uint *szp);
@@ -1284,6 +1285,7 @@ erts_get_node_and_dist_references(struct process *proc)
INIT_AM(thread_progress_delete_timer);
INIT_AM(signal);
INIT_AM(sequence);
+ INIT_AM(persistent_term);
references_atoms_need_init = 0;
}
@@ -1916,6 +1918,14 @@ insert_dist_suspended_procs(DistEntry *dep)
}
}
+static void
+insert_persistent_term(ErlOffHeap *ohp, void *arg)
+{
+ Eterm heap[3];
+ insert_offheap(ohp, SYSTEM_REF,
+ TUPLE2(&heap[0], AM_system, AM_persistent_term));
+}
+
#ifdef ERL_NODE_BOOKKEEP
void
erts_node_bookkeep(ErlNode *np, Eterm term, int what)
@@ -1990,8 +2000,8 @@ setup_reference_table(void)
if (proc)
insert_process(proc);
}
-
- erts_foreach_sys_msg_in_q(insert_sys_msg);
+
+ erts_debug_foreach_sys_msg_in_q(insert_sys_msg);
/* Insert all ports */
max = erts_ptab_max(&erts_port);
@@ -2096,6 +2106,10 @@ setup_reference_table(void)
/* Insert all bif timers */
erts_debug_bif_timer_foreach(insert_bif_timer, NULL);
+ /* Insert persistent term storage */
+ erts_debug_foreach_persistent_term_off_heap(insert_persistent_term,
+ NULL);
+
/* Insert node table (references to dist) */
hash_foreach(&erts_node_table, insert_erl_node, NULL);
}