summaryrefslogtreecommitdiff
path: root/erts/preloaded
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2019-12-11 16:51:04 +0100
committerRickard Green <rickard@erlang.org>2019-12-18 20:14:44 +0100
commit77922009917e425dee66d0f829b2df1a895ade3e (patch)
tree6f9def1eda2c17093c8cf1b3c771662a67fa7e2b /erts/preloaded
parent51fdcb19bc25c67334450cce62a44dc8f552d057 (diff)
downloaderlang-77922009917e425dee66d0f829b2df1a895ade3e.tar.gz
Timeout option for spawn_opt() and spawn_request()
Diffstat (limited to 'erts/preloaded')
-rw-r--r--erts/preloaded/ebin/erlang.beambin108896 -> 109192 bytes
-rw-r--r--erts/preloaded/src/erlang.erl21
2 files changed, 14 insertions, 7 deletions
diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam
index 952ca0d31a..75b325f5e3 100644
--- a/erts/preloaded/ebin/erlang.beam
+++ b/erts/preloaded/ebin/erlang.beam
Binary files differ
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl
index 5c8aeb6d1d..eadf7650d4 100644
--- a/erts/preloaded/src/erlang.erl
+++ b/erts/preloaded/src/erlang.erl
@@ -2925,7 +2925,8 @@ spawn_monitor(M, F, A) ->
| {min_heap_size, Size :: non_neg_integer()}
| {min_bin_vheap_size, VSize :: non_neg_integer()}
| {max_heap_size, Size :: max_heap_size()}
- | {message_queue_data, MQD :: message_queue_data()}.
+ | {message_queue_data, MQD :: message_queue_data()}
+ | {timeout, Timeout :: non_neg_integer()}.
-spec spawn_opt(Fun, Options) -> pid() | {pid(), reference()} when
Fun :: function(),
@@ -2940,7 +2941,8 @@ spawn_opt(F, O) ->
-spec spawn_opt(Node, Fun, Options) -> pid() | {pid(), reference()} when
Node :: node(),
Fun :: function(),
- Options :: [monitor | link | OtherOption],
+ Options :: [monitor | link | {timeout, Timeout} | OtherOption],
+ Timeout :: non_neg_integer(),
OtherOption :: term().
spawn_opt(N, F, O) when N =:= erlang:node() ->
erlang:spawn_opt(F, O);
@@ -3058,7 +3060,8 @@ spawn_opt(_Module, _Function, _Args, _Options) ->
Module :: module(),
Function :: atom(),
Args :: [term()],
- Options :: [monitor | link | OtherOption],
+ Options :: [monitor | link | {timeout, Timeout} | OtherOption],
+ Timeout :: non_neg_integer(),
OtherOption :: term().
spawn_opt(N, M, F, A, O) when N =:= erlang:node(),
@@ -3102,8 +3105,10 @@ spawn_opt(N,M,F,A,O) ->
erlang:error(badarg, [N,M,F,A,O]).
old_remote_spawn_opt(N, M, F, A, O) ->
- case lists:member(monitor, O) of
- true ->
+ case {lists:member(monitor, O), lists:keymember(timeout,1,O)} of
+ {true,_} ->
+ badarg;
+ {_,true} ->
badarg;
_ ->
{L,NO} = lists:foldl(fun (link, {_, NewOpts}) ->
@@ -3201,8 +3206,9 @@ spawn_request(A1, A2) ->
Node :: node(),
Fun :: function(),
Options :: [Option],
- Option :: monitor | link | {reply_tag, ReplyTag} | OtherOption,
+ Option :: monitor | link | {reply_tag, ReplyTag} | {timeout, Timeout} | OtherOption,
ReplyTag :: term(),
+ Timeout :: non_neg_integer(),
OtherOption :: term(),
ReqId :: reference();
(Module, Function, Args) ->
@@ -3274,8 +3280,9 @@ spawn_request(M, F, A, O) ->
Function :: atom(),
Args :: [term()],
Options :: [Option],
- Option :: monitor | link | {reply_tag, ReplyTag} | OtherOption,
+ Option :: monitor | link | {reply_tag, ReplyTag} | {timeout, Timeout} | OtherOption,
ReplyTag :: term(),
+ Timeout :: non_neg_integer(),
OtherOption :: term(),
ReqId :: reference().