diff options
author | Anders Svensson <[email protected]> | 2013-06-11 12:19:55 +0200 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2013-06-11 12:19:55 +0200 |
commit | 69694acdab4391ef3a10c1e9d8130a1cf39beb4a (patch) | |
tree | afa5e56adaa9e0437470d45e3966b48237997102 /lib/diameter/src/base/diameter_traffic.erl | |
parent | c80d324e1eeb34129e63e10b00cff688988b0296 (diff) | |
parent | 78b3dc6eea23a728a20947ccc425a7860ef39d97 (diff) | |
download | otp-69694acdab4391ef3a10c1e9d8130a1cf39beb4a.tar.gz otp-69694acdab4391ef3a10c1e9d8130a1cf39beb4a.tar.bz2 otp-69694acdab4391ef3a10c1e9d8130a1cf39beb4a.zip |
Merge branch 'anders/diameter/request_spawn/OTP-11060' into maint
* anders/diameter/request_spawn/OTP-11060:
Make spawn options for request processes configurable
Diffstat (limited to 'lib/diameter/src/base/diameter_traffic.erl')
-rw-r--r-- | lib/diameter/src/base/diameter_traffic.erl | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl index 0b15e68ec7..6f81ade30e 100644 --- a/lib/diameter/src/base/diameter_traffic.erl +++ b/lib/diameter/src/base/diameter_traffic.erl @@ -48,6 +48,7 @@ -define(BASE, ?DIAMETER_DICT_COMMON). %% Note: the RFC 3588 dictionary -define(DEFAULT_TIMEOUT, 5000). %% for outgoing requests +-define(DEFAULT_SPAWN_OPTS, []). %% Table containing outgoing requests for which a reply has yet to be %% received. @@ -153,13 +154,8 @@ receive_message(TPid, Pkt, Dict0, RecvData) RecvData). %% Incoming request ... -recv(true, false, TPid, Pkt, Dict0, RecvData) -> - try - spawn(fun() -> recv_request(TPid, Pkt, Dict0, RecvData) end) - catch - error: system_limit = E -> %% discard - ?LOG({error, E}, now()) - end; +recv(true, false, TPid, Pkt, Dict0, T) -> + spawn_request(TPid, Pkt, Dict0, T); %% ... answer to known request ... recv(false, #request{ref = Ref, handler = Pid} = Req, _, Pkt, Dict0, _) -> @@ -177,6 +173,21 @@ recv(false, #request{ref = Ref, handler = Pid} = Req, _, Pkt, Dict0, _) -> recv(false, false, _, _, _, _) -> ok. +%% spawn_request/4 + +spawn_request(TPid, Pkt, Dict0, {Opts, RecvData}) -> + spawn_request(TPid, Pkt, Dict0, Opts, RecvData); +spawn_request(TPid, Pkt, Dict0, RecvData) -> + spawn_request(TPid, Pkt, Dict0, ?DEFAULT_SPAWN_OPTS, RecvData). + +spawn_request(TPid, Pkt, Dict0, Opts, RecvData) -> + try + spawn_opt(fun() -> recv_request(TPid, Pkt, Dict0, RecvData) end, Opts) + catch + error: system_limit = E -> %% discard + ?LOG({error, E}, now()) + end. + %% --------------------------------------------------------------------------- %% recv_request/4 %% --------------------------------------------------------------------------- |