diff options
Diffstat (limited to 'erts/emulator/test/process_SUITE.erl')
-rw-r--r-- | erts/emulator/test/process_SUITE.erl | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/erts/emulator/test/process_SUITE.erl b/erts/emulator/test/process_SUITE.erl index f6c6526f54..d28c4d15db 100644 --- a/erts/emulator/test/process_SUITE.erl +++ b/erts/emulator/test/process_SUITE.erl @@ -95,6 +95,8 @@ alias_bif/1, monitor_alias/1, spawn_monitor_alias/1, + demonitor_aliasmonitor/1, + down_aliasmonitor/1, monitor_tag/1, no_pid_wrap/1]). @@ -184,7 +186,8 @@ groups() -> gc_request_when_gc_disabled, gc_request_blast_when_gc_disabled, otp_16436, otp_16642]}, {alias, [], - [alias_bif, monitor_alias, spawn_monitor_alias]}]. + [alias_bif, monitor_alias, spawn_monitor_alias, + demonitor_aliasmonitor, down_aliasmonitor]}]. init_per_suite(Config) -> A0 = case application:start(sasl) of @@ -5025,6 +5028,51 @@ spawn_monitor_alias_test(Peer, Node, SpawnType, ExitReason) -> ok end. +demonitor_aliasmonitor(Config) when is_list(Config) -> + {ok, Peer, Node} = ?CT_PEER(), + Fun = fun () -> + receive + {alias, Alias} -> + Alias ! {alias_reply, Alias, self()} + end + end, + LPid = spawn(Fun), + RPid = spawn(Node, Fun), + AliasMonitor = erlang:monitor(process, LPid, [{alias, explicit_unalias}]), + erlang:demonitor(AliasMonitor), + LPid ! {alias, AliasMonitor}, + receive {alias_reply, AliasMonitor, LPid} -> ok end, + %% Demonitor signal has been received and cleaned up. Cleanup of + %% it erroneously removed it from the alias table which caused + %% remote use of the alias to stop working... + RPid ! {alias, AliasMonitor}, + receive {alias_reply, AliasMonitor, RPid} -> ok end, + exit(LPid, kill), + peer:stop(Peer), + false = is_process_alive(LPid), + ok. + +down_aliasmonitor(Config) when is_list(Config) -> + {ok, Peer, Node} = ?CT_PEER(), + LPid = spawn(fun () -> receive infinty -> ok end end), + RPid = spawn(Node, + fun () -> + receive + {alias, Alias} -> + Alias ! {alias_reply, Alias, self()} + end + end), + AliasMonitor = erlang:monitor(process, LPid, [{alias, explicit_unalias}]), + exit(LPid, bye), + receive {'DOWN', AliasMonitor, process, LPid, bye} -> ok end, + %% Down signal has been received and cleaned up. Cleanup of + %% it erroneously removed it from the alias table which caused + %% remote use of the alias to stop working... + RPid ! {alias, AliasMonitor}, + receive {alias_reply, AliasMonitor, RPid} -> ok end, + peer:stop(Peer), + ok. + monitor_tag(Config) when is_list(Config) -> %% Exit signals with immediate exit reasons are sent %% in a different manner than compound exit reasons, and |