Skip to content

Commit

Permalink
Merge branch 'maint'
Browse files Browse the repository at this point in the history
* maint:
  Guard `gen_*` arguments in the API
  • Loading branch information
RaimoNiskanen committed Nov 27, 2023
2 parents 4d1232f + 780c5b3 commit 462c696
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 25 deletions.
4 changes: 3 additions & 1 deletion lib/stdlib/src/gen.erl
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,9 @@ do_for_proc({_Name, Node} = Process, Fun) when is_atom(Node) ->
%%%-----------------------------------------------------------------
where({global, Name}) -> global:whereis_name(Name);
where({via, Module, Name}) -> Module:whereis_name(Name);
where({local, Name}) -> whereis(Name).
where({local, Name}) -> whereis(Name);
where(ServerName) ->
error(badarg, [ServerName]).

register_name({local, Name} = LN) ->
try register(Name, self()) of
Expand Down
26 changes: 19 additions & 7 deletions lib/stdlib/src/gen_event.erl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 1996-2022. All Rights Reserved.
%% Copyright Ericsson AB 1996-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.
Expand Down Expand Up @@ -193,11 +193,15 @@ start() ->
start(Name) when is_tuple(Name) ->
gen:start(?MODULE, nolink, Name, ?NO_CALLBACK, [], []);
start(Options) when is_list(Options) ->
gen:start(?MODULE, nolink, ?NO_CALLBACK, [], Options).
gen:start(?MODULE, nolink, ?NO_CALLBACK, [], Options);
start(Arg) ->
error(badarg, [Arg]).

-spec start(emgr_name(), [option()]) -> start_ret().
start(Name, Options) when is_tuple(Name), is_list(Options) ->
gen:start(?MODULE, nolink, Name, ?NO_CALLBACK, [], Options);
start(Name, Options) ->
gen:start(?MODULE, nolink, Name, ?NO_CALLBACK, [], Options).
error(badarg, [Name, Options]).

-spec start_link() -> start_ret().
start_link() ->
Expand All @@ -207,11 +211,15 @@ start_link() ->
start_link(Name) when is_tuple(Name) ->
gen:start(?MODULE, link, Name, ?NO_CALLBACK, [], []);
start_link(Options) when is_list(Options) ->
gen:start(?MODULE, link, ?NO_CALLBACK, [], Options).
gen:start(?MODULE, link, ?NO_CALLBACK, [], Options);
start_link(Arg) ->
error(badarg, [Arg]).

-spec start_link(emgr_name(), [option()]) -> start_ret().
start_link(Name, Options) when is_tuple(Name), is_list(Options) ->
gen:start(?MODULE, link, Name, ?NO_CALLBACK, [], Options);
start_link(Name, Options) ->
gen:start(?MODULE, link, Name, ?NO_CALLBACK, [], Options).
error(badarg, [Name, Options]).

-spec start_monitor() -> start_mon_ret().
start_monitor() ->
Expand All @@ -221,11 +229,15 @@ start_monitor() ->
start_monitor(Name) when is_tuple(Name) ->
gen:start(?MODULE, monitor, Name, ?NO_CALLBACK, [], []);
start_monitor(Options) when is_list(Options) ->
gen:start(?MODULE, monitor, ?NO_CALLBACK, [], Options).
gen:start(?MODULE, monitor, ?NO_CALLBACK, [], Options);
start_monitor(Arg) ->
error(badarg, [Arg]).

-spec start_monitor(emgr_name(), [option()]) -> start_mon_ret().
start_monitor(Name, Options) when is_tuple(Name), is_list(Options) ->
gen:start(?MODULE, monitor, Name, ?NO_CALLBACK, [], Options);
start_monitor(Name, Options) ->
gen:start(?MODULE, monitor, Name, ?NO_CALLBACK, [], Options).
error(badarg, [Name, Options]).

%% -spec init_it(pid(), 'self' | pid(), emgr_name(), module(), [term()], [_]) ->
init_it(Starter, self, Name, Mod, Args, Options) ->
Expand Down
30 changes: 24 additions & 6 deletions lib/stdlib/src/gen_server.erl
Original file line number Diff line number Diff line change
Expand Up @@ -287,8 +287,11 @@
) ->
start_ret().
%%
start(Module, Args, Options)
when is_atom(Module), is_list(Options) ->
gen:start(?MODULE, nolink, Module, Args, Options);
start(Module, Args, Options) ->
gen:start(?MODULE, nolink, Module, Args, Options).
error(badarg, [Module, Args, Options]).

-spec start(
ServerName :: server_name(),
Expand All @@ -298,8 +301,11 @@ start(Module, Args, Options) ->
) ->
start_ret().
%%
start(ServerName, Module, Args, Options)
when is_tuple(ServerName), is_atom(Module), is_list(Options) ->
gen:start(?MODULE, nolink, ServerName, Module, Args, Options);
start(ServerName, Module, Args, Options) ->
gen:start(?MODULE, nolink, ServerName, Module, Args, Options).
error(badarg, [ServerName, Module, Args, Options]).

-spec start_link(
Module :: module(),
Expand All @@ -308,8 +314,11 @@ start(ServerName, Module, Args, Options) ->
) ->
start_ret().
%%
start_link(Module, Args, Options)
when is_atom(Module), is_list(Options) ->
gen:start(?MODULE, link, Module, Args, Options);
start_link(Module, Args, Options) ->
gen:start(?MODULE, link, Module, Args, Options).
error(badarg, [Module, Args, Options]).

-spec start_link(
ServerName :: server_name(),
Expand All @@ -319,8 +328,11 @@ start_link(Module, Args, Options) ->
) ->
start_ret().
%%
start_link(ServerName, Module, Args, Options)
when is_tuple(ServerName), is_atom(Module), is_list(Options) ->
gen:start(?MODULE, link, ServerName, Module, Args, Options);
start_link(ServerName, Module, Args, Options) ->
gen:start(?MODULE, link, ServerName, Module, Args, Options).
error(badarg, [ServerName, Module, Args, Options]).

-spec start_monitor(
Module :: module(),
Expand All @@ -329,8 +341,11 @@ start_link(ServerName, Module, Args, Options) ->
) ->
start_mon_ret().
%%
start_monitor(Module, Args, Options)
when is_atom(Module), is_list(Options) ->
gen:start(?MODULE, monitor, Module, Args, Options);
start_monitor(Module, Args, Options) ->
gen:start(?MODULE, monitor, Module, Args, Options).
error(badarg, [Module, Args, Options]).

-spec start_monitor(
ServerName :: server_name(),
Expand All @@ -340,8 +355,11 @@ start_monitor(Module, Args, Options) ->
) ->
start_mon_ret().
%%
start_monitor(ServerName, Module, Args, Options)
when is_tuple(ServerName), is_atom(Module), is_list(Options) ->
gen:start(?MODULE, monitor, ServerName, Module, Args, Options);
start_monitor(ServerName, Module, Args, Options) ->
gen:start(?MODULE, monitor, ServerName, Module, Args, Options).
error(badarg, [ServerName, Module, Args, Options]).


%% -----------------------------------------------------------------
Expand Down
32 changes: 25 additions & 7 deletions lib/stdlib/src/gen_statem.erl
Original file line number Diff line number Diff line change
Expand Up @@ -587,43 +587,61 @@ event_type(Type) ->
-spec start(
Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
start_ret().
start(Module, Args, Opts)
when is_atom(Module), is_list(Opts) ->
gen:start(?MODULE, nolink, Module, Args, Opts);
start(Module, Args, Opts) ->
gen:start(?MODULE, nolink, Module, Args, Opts).
error(badarg, [Module, Args, Opts]).
%%
-spec start(
ServerName :: server_name(),
Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
start_ret().
start(ServerName, Module, Args, Opts)
when is_tuple(ServerName), is_atom(Module), is_list(Opts) ->
gen:start(?MODULE, nolink, ServerName, Module, Args, Opts);
start(ServerName, Module, Args, Opts) ->
gen:start(?MODULE, nolink, ServerName, Module, Args, Opts).
error(badarg, [ServerName, Module, Args, Opts]).

%% Start and link to a state machine
-spec start_link(
Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
start_ret().
start_link(Module, Args, Opts)
when is_atom(Module), is_list(Opts) ->
gen:start(?MODULE, link, Module, Args, Opts);
start_link(Module, Args, Opts) ->
gen:start(?MODULE, link, Module, Args, Opts).
error(badarg, [Module, Args, Opts]).
%%
-spec start_link(
ServerName :: server_name(),
Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
start_ret().
start_link(ServerName, Module, Args, Opts)
when is_tuple(ServerName), is_atom(Module), is_list(Opts) ->
gen:start(?MODULE, link, ServerName, Module, Args, Opts);
start_link(ServerName, Module, Args, Opts) ->
gen:start(?MODULE, link, ServerName, Module, Args, Opts).
error(badarg, [ServerName, Module, Args, Opts]).

%% Start and monitor a state machine
-spec start_monitor(
Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
start_mon_ret().
start_monitor(Module, Args, Opts)
when is_atom(Module), is_list(Opts) ->
gen:start(?MODULE, monitor, Module, Args, Opts);
start_monitor(Module, Args, Opts) ->
gen:start(?MODULE, monitor, Module, Args, Opts).
error(badarg, [Module, Args, Opts]).
%%
-spec start_monitor(
ServerName :: server_name(),
Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
start_mon_ret().
start_monitor(ServerName, Module, Args, Opts)
when is_tuple(ServerName), is_atom(Module), is_list(Opts) ->
gen:start(?MODULE, monitor, ServerName, Module, Args, Opts);
start_monitor(ServerName, Module, Args, Opts) ->
gen:start(?MODULE, monitor, ServerName, Module, Args, Opts).
error(badarg, [ServerName, Module, Args, Opts]).

%% Stop a state machine
-spec stop(ServerRef :: server_ref()) -> ok.
Expand Down Expand Up @@ -679,7 +697,7 @@ call(ServerRef, Request, {dirty_timeout, T} = Timeout) ->
call(ServerRef, Request, {clean_timeout, T} = Timeout) ->
call(ServerRef, Request, Timeout, T);
call(ServerRef, Request, {_, _} = Timeout) ->
erlang:error(badarg, [ServerRef,Request,Timeout]);
error(badarg, [ServerRef,Request,Timeout]);
call(ServerRef, Request, Timeout) ->
call(ServerRef, Request, Timeout, Timeout).

Expand Down
20 changes: 16 additions & 4 deletions lib/wx/src/wx_object.erl
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,11 @@
Args::term(),
Flag::trace | log | {logfile, string()} | statistics | debug,
Options::[{timeout, timeout()} | {debug, [Flag]}].
start(Mod, Args, Options)
when is_atom(Mod), is_list(Options) ->
gen_response(gen:start(?MODULE, nolink, Mod, Args, [get(?WXE_IDENTIFIER)|Options]));
start(Mod, Args, Options) ->
gen_response(gen:start(?MODULE, nolink, Mod, Args, [get(?WXE_IDENTIFIER)|Options])).
error(badarg, [Mod, Args, Options]).

%% @doc Starts a generic wx_object server and invokes Mod:init(Args) in the
%% new process.
Expand All @@ -210,8 +213,11 @@ start(Mod, Args, Options) ->
Args::term(),
Flag::trace | log | {logfile, string()} | statistics | debug,
Options::[{timeout, timeout()} | {debug, [Flag]}].
start(Name, Mod, Args, Options)
when is_tuple(Name), is_atom(Mod), is_list(Options) ->
gen_response(gen:start(?MODULE, nolink, Name, Mod, Args, [get(?WXE_IDENTIFIER)|Options]));
start(Name, Mod, Args, Options) ->
gen_response(gen:start(?MODULE, nolink, Name, Mod, Args, [get(?WXE_IDENTIFIER)|Options])).
error(badarg, [Name, Mod, Args, Options]).

%% @doc Starts a generic wx_object server and invokes Mod:init(Args) in the
%% new process.
Expand All @@ -220,8 +226,11 @@ start(Name, Mod, Args, Options) ->
Args::term(),
Flag::trace | log | {logfile, string()} | statistics | debug,
Options::[{timeout, timeout()} | {debug, [Flag]}].
start_link(Mod, Args, Options)
when is_atom(Mod), is_list(Options) ->
gen_response(gen:start(?MODULE, link, Mod, Args, [get(?WXE_IDENTIFIER)|Options]));
start_link(Mod, Args, Options) ->
gen_response(gen:start(?MODULE, link, Mod, Args, [get(?WXE_IDENTIFIER)|Options])).
error(badarg, [Mod, Args, Options]).

%% @doc Starts a generic wx_object server and invokes Mod:init(Args) in the
%% new process.
Expand All @@ -231,8 +240,11 @@ start_link(Mod, Args, Options) ->
Args::term(),
Flag::trace | log | {logfile, string()} | statistics | debug,
Options::[{timeout, timeout()} | {debug, [Flag]}].
start_link(Name, Mod, Args, Options)
when is_tuple(Name), is_atom(Mod), is_list(Options) ->
gen_response(gen:start(?MODULE, link, Name, Mod, Args, [get(?WXE_IDENTIFIER)|Options]));
start_link(Name, Mod, Args, Options) ->
gen_response(gen:start(?MODULE, link, Name, Mod, Args, [get(?WXE_IDENTIFIER)|Options])).
error(badarg, [Name, Mod, Args, Options]).

gen_response({ok, Pid}) ->
receive {started, Pid, Ref = #wx_ref{}} -> Ref end;
Expand Down

0 comments on commit 462c696

Please sign in to comment.