summaryrefslogtreecommitdiff
path: root/lib/stdlib/src
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2021-04-27 17:44:49 +0200
committerRickard Green <rickard@erlang.org>2021-04-27 18:42:06 +0200
commit0e37e492aa527dcbebf3bbb805dc10ed072b4021 (patch)
treeaa99574e4df8e237d89e528d5188b5ed0e8e6266 /lib/stdlib/src
parent0ab8930521a1404f26ea677eadd5694caf5e0d38 (diff)
downloaderlang-0e37e492aa527dcbebf3bbb805dc10ed072b4021.tar.gz
Prepare gen calls for extra data in tag also when using aliases
Diffstat (limited to 'lib/stdlib/src')
-rw-r--r--lib/stdlib/src/gen.erl7
-rw-r--r--lib/stdlib/src/gen_event.erl8
-rw-r--r--lib/stdlib/src/gen_fsm.erl8
-rw-r--r--lib/stdlib/src/gen_server.erl8
-rw-r--r--lib/stdlib/src/gen_statem.erl13
5 files changed, 13 insertions, 31 deletions
diff --git a/lib/stdlib/src/gen.erl b/lib/stdlib/src/gen.erl
index 68bbbb3365..6a07eb34d8 100644
--- a/lib/stdlib/src/gen.erl
+++ b/lib/stdlib/src/gen.erl
@@ -335,9 +335,12 @@ check_response(Msg, Mref) when is_reference(Mref) ->
%%
%% Send a reply to the client.
%%
+reply({_To, [alias|Alias] = Tag}, Reply) when is_reference(Alias) ->
+ Alias ! {Tag, Reply}, ok;
+reply({_To, [[alias|Alias] | _] = Tag}, Reply) when is_reference(Alias) ->
+ Alias ! {Tag, Reply}, ok;
reply({To, Tag}, Reply) ->
- Msg = {Tag, Reply},
- try To ! Msg catch _:_ -> Msg end.
+ try To ! {Tag, Reply}, ok catch _:_ -> ok end.
%%-----------------------------------------------------------------
%% Syncronously stop a generic process
diff --git a/lib/stdlib/src/gen_event.erl b/lib/stdlib/src/gen_event.erl
index 0d069119c9..b4927b92bd 100644
--- a/lib/stdlib/src/gen_event.erl
+++ b/lib/stdlib/src/gen_event.erl
@@ -404,12 +404,8 @@ terminate_server(Reason, Parent, MSL, ServerName) ->
do_unlink(Parent, MSL),
exit(Reason).
-reply({To, [alias|Alias] = Tag}, Reply) when is_pid(To), is_reference(Alias) ->
- Alias ! {Tag, Reply},
- ok;
-reply({From, Ref}, Msg) ->
- From ! {Ref, Msg},
- ok.
+reply(From, Reply) ->
+ gen:reply(From, Reply).
%% unlink the supervisor process of all supervised handlers.
%% We do not want a handler supervisor to EXIT due to the
diff --git a/lib/stdlib/src/gen_fsm.erl b/lib/stdlib/src/gen_fsm.erl
index 9ff58584eb..afd9fe8e16 100644
--- a/lib/stdlib/src/gen_fsm.erl
+++ b/lib/stdlib/src/gen_fsm.erl
@@ -564,12 +564,8 @@ from({'$gen_sync_all_state_event', From, _Event}) -> From;
from(_) -> undefined.
%% Send a reply to the client.
-reply({To, [alias|Alias] = Tag}, Reply) when is_pid(To), is_reference(Alias) ->
- Alias ! {Tag, Reply},
- ok;
-reply({To, Tag}, Reply) ->
- catch To ! {Tag, Reply},
- ok.
+reply(From, Reply) ->
+ gen:reply(From, Reply).
reply(Name, From, Reply, Debug, StateName) ->
reply(From, Reply),
diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl
index f59456d61a..9da3c59ff9 100644
--- a/lib/stdlib/src/gen_server.erl
+++ b/lib/stdlib/src/gen_server.erl
@@ -296,12 +296,8 @@ cast_msg(Request) -> {'$gen_cast',Request}.
%% -----------------------------------------------------------------
%% Send a reply to the client.
%% -----------------------------------------------------------------
-reply({To, [alias|Alias] = Tag}, Reply) when is_pid(To), is_reference(Alias) ->
- Alias ! {Tag, Reply},
- ok;
-reply({To, Tag}, Reply) ->
- catch To ! {Tag, Reply},
- ok.
+reply(From, Reply) ->
+ gen:reply(From, Reply).
%% -----------------------------------------------------------------
%% Asynchronous broadcast, returns nothing, it's just send 'n' pray
diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl
index 69ac6361ae..e91a24fd53 100644
--- a/lib/stdlib/src/gen_statem.erl
+++ b/lib/stdlib/src/gen_statem.erl
@@ -629,17 +629,8 @@ reply(Replies) when is_list(Replies) ->
%%
-compile({inline, [reply/2]}).
-spec reply(From :: from(), Reply :: term()) -> ok.
-reply({To, [alias|Alias] = Tag}, Reply) when is_pid(To), is_reference(Alias) ->
- Alias ! {Tag, Reply},
- ok;
-reply({To,Tag}, Reply) when is_pid(To) ->
- Msg = {Tag,Reply},
- try To ! Msg of
- _ ->
- ok
- catch
- _:_ -> ok
- end.
+reply(From, Reply) ->
+ gen:reply(From, Reply).
%% Instead of starting the state machine through start/3,4
%% or start_link/3,4 turn the current process presumably