File 0697-erts-Fix-small-leak-for-process_flag-3-on-dead-proce.patch of Package erlang
From 51e893be5b28a665ae8b8655d568687c18925eb6 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Mon, 14 Dec 2020 17:41:53 +0100
Subject: [PATCH] erts: Fix small leak for process_flag/3 on dead process
---
erts/emulator/beam/bif.c | 4 +++-
erts/emulator/test/process_SUITE.erl | 7 +++++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c
index 000397e790..e68417f93e 100644
--- a/erts/emulator/beam/bif.c
+++ b/erts/emulator/beam/bif.c
@@ -1722,8 +1722,10 @@ BIF_RETTYPE erts_internal_process_flag_3(BIF_ALIST_3)
exec_process_flag_3,
(void *) pf3a);
- if (is_non_value(res))
+ if (is_non_value(res)) {
+ erts_free(ERTS_ALC_T_PF3_ARGS, pf3a);
BIF_RET(am_badarg);
+ }
return res;
}
diff --git a/erts/emulator/test/process_SUITE.erl b/erts/emulator/test/process_SUITE.erl
index 0cb0d6c1e2..d693ba69c5 100644
--- a/erts/emulator/test/process_SUITE.erl
+++ b/erts/emulator/test/process_SUITE.erl
@@ -1534,10 +1534,13 @@ process_flag_badarg(Config) when is_list(Config) ->
chk_badarg(fun () -> process_flag(priority, 4711) end),
chk_badarg(fun () -> process_flag(save_calls, hmmm) end),
- P= spawn_link(fun () -> receive die -> ok end end),
+ {P,Mref} = spawn_monitor(fun () -> receive "in vain" -> no end end),
chk_badarg(fun () -> process_flag(P, save_calls, hmmm) end),
chk_badarg(fun () -> process_flag(gurka, save_calls, hmmm) end),
- P ! die,
+ exit(P, die),
+ chk_badarg(fun () -> process_flag(P, save_calls, 0) end),
+ {'DOWN', Mref, process, P, die} = receive M -> M end,
+ chk_badarg(fun () -> process_flag(P, save_calls, 0) end),
ok.
-include_lib("stdlib/include/ms_transform.hrl").
--
2.26.2