summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2023-04-12 12:37:13 +0200
committerRickard Green <rickard@erlang.org>2023-04-12 12:37:13 +0200
commitf5a9c68de0523608c0cb96fd870b671305b5c2eb (patch)
treebaceccf4055679d060be1d6146ebab2ef3b766cb
parent5400ccf243a31d664153a4b9ceb9de3edfce1e0e (diff)
downloaderlang-f5a9c68de0523608c0cb96fd870b671305b5c2eb.tar.gz
[erts] Fix debug functionalty for monitors/links
-rw-r--r--erts/emulator/beam/erl_monitor_link.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/erts/emulator/beam/erl_monitor_link.c b/erts/emulator/beam/erl_monitor_link.c
index e103807940..c25ca8d5e5 100644
--- a/erts/emulator/beam/erl_monitor_link.c
+++ b/erts/emulator/beam/erl_monitor_link.c
@@ -703,10 +703,15 @@ erts_debug_monitor_tree_destroying_foreach(ErtsMonitor *root,
void *arg,
void *vysp)
{
- void *tmp_vysp = erts_alloc(ERTS_ALC_T_ML_YIELD_STATE,
- sizeof(ErtsMonLnkYieldState));
+ void *tmp_vysp;
Sint reds;
- sys_memcpy(tmp_vysp, tmp_vysp, sizeof(ErtsMonLnkYieldState));
+ if (!vysp)
+ tmp_vysp = NULL;
+ else {
+ tmp_vysp = erts_alloc(ERTS_ALC_T_ML_YIELD_STATE,
+ sizeof(ErtsMonLnkYieldState));
+ sys_memcpy(tmp_vysp, tmp_vysp, sizeof(ErtsMonLnkYieldState));
+ }
do {
reds = ml_rbt_foreach_yielding((ErtsMonLnkNode *) root,
(ErtsMonLnkNodeFunc) func,
@@ -1348,10 +1353,15 @@ erts_debug_link_tree_destroying_foreach(ErtsLink *root,
void *arg,
void *vysp)
{
- void *tmp_vysp = erts_alloc(ERTS_ALC_T_ML_YIELD_STATE,
- sizeof(ErtsMonLnkYieldState));
+ void *tmp_vysp;
Sint reds;
- sys_memcpy(tmp_vysp, vysp, sizeof(ErtsMonLnkYieldState));
+ if (!vysp)
+ tmp_vysp = NULL;
+ else {
+ tmp_vysp = erts_alloc(ERTS_ALC_T_ML_YIELD_STATE,
+ sizeof(ErtsMonLnkYieldState));
+ sys_memcpy(tmp_vysp, vysp, sizeof(ErtsMonLnkYieldState));
+ }
do {
reds = ml_rbt_foreach_yielding((ErtsMonLnkNode *) root,
(ErtsMonLnkNodeFunc) func,