summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/erl_monitor_link.c
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/beam/erl_monitor_link.c')
-rw-r--r--erts/emulator/beam/erl_monitor_link.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/erts/emulator/beam/erl_monitor_link.c b/erts/emulator/beam/erl_monitor_link.c
index 23fd3dd566..e103807940 100644
--- a/erts/emulator/beam/erl_monitor_link.c
+++ b/erts/emulator/beam/erl_monitor_link.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2018-2021. All Rights Reserved.
+ * Copyright Ericsson AB 2018-2023. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -51,6 +51,7 @@ ml_get_key(ErtsMonLnkNode *mln)
case ERTS_MON_TYPE_PROC:
case ERTS_MON_TYPE_PORT:
case ERTS_MON_TYPE_DIST_PROC:
+ case ERTS_MON_TYPE_DIST_PORT:
case ERTS_MON_TYPE_TIME_OFFSET:
case ERTS_MON_TYPE_RESOURCE: {
ErtsMonitorData *mdp = erts_monitor_to_data(mln);
@@ -197,8 +198,7 @@ ml_cmp_keys(Eterm key1, Eterm key2)
if (n1->sysname != n2->sysname)
return n1->sysname < n2->sysname ? -1 : 1;
ASSERT(n1->creation != n2->creation);
- if (n1->creation != 0 && n2->creation != 0)
- return n1->creation < n2->creation ? -1 : 1;
+ return n1->creation < n2->creation ? -1 : 1;
}
ndw1 = external_thing_data_words(et1);
@@ -891,6 +891,7 @@ erts_monitor_create(Uint16 type, Eterm ref, Eterm orgn, Eterm trgt, Eterm name,
break;
}
case ERTS_MON_TYPE_DIST_PROC:
+ case ERTS_MON_TYPE_DIST_PORT:
case ERTS_MON_TYPE_RESOURCE:
case ERTS_MON_TYPE_NODE:
case ERTS_MON_TYPE_NODES: {
@@ -914,7 +915,7 @@ erts_monitor_create(Uint16 type, Eterm ref, Eterm orgn, Eterm trgt, Eterm name,
else {
/* Pending spawn_request() */
pending_flag = ERTS_ML_FLG_SPAWN_PENDING;
- /* Prepare for storage of exteral pid */
+ /* Prepare for storage of external pid */
tsz = EXTERNAL_PID_HEAP_SIZE;
/* name contains tag */
@@ -1094,6 +1095,16 @@ erts_monitor_destroy__(ErtsMonitorData *mdp)
|| ((mdp->origin.flags & ERTS_ML_FLGS_SAME)
== (mdp->u.target.flags & ERTS_ML_FLGS_SAME)));
+ if (mdp->origin.flags & ERTS_ML_STATE_ALIAS_MASK) {
+ ASSERT(mdp->origin.type == ERTS_MON_TYPE_ALIAS
+ || mdp->origin.type == ERTS_MON_TYPE_PROC
+ || mdp->origin.type == ERTS_MON_TYPE_PORT
+ || mdp->origin.type == ERTS_MON_TYPE_TIME_OFFSET
+ || mdp->origin.type == ERTS_MON_TYPE_DIST_PROC
+ || mdp->origin.type == ERTS_MON_TYPE_DIST_PORT);
+ erts_pid_ref_delete(mdp->ref);
+ }
+
switch (mdp->origin.type) {
case ERTS_MON_TYPE_ALIAS:
ERTS_ML_ASSERT(!(mdp->origin.flags & ERTS_ML_FLG_TAG));
@@ -1203,7 +1214,8 @@ erts_monitor_size(ErtsMonitor *mon)
&& mon->type != ERTS_MON_TYPE_NODES) {
if (!is_immed(mdep->md.ref))
hsz += NC_HEAP_SIZE(mdep->md.ref);
- if (mon->type == ERTS_MON_TYPE_DIST_PROC) {
+ if (mon->type == ERTS_MON_TYPE_DIST_PROC
+ || mon->type == ERTS_MON_TYPE_DIST_PORT) {
if (!is_immed(mdep->md.origin.other.item))
hsz += NC_HEAP_SIZE(mdep->md.origin.other.item);
if (!is_immed(mdep->md.u.target.other.item))