diff options
author | Anders Svensson <[email protected]> | 2013-06-10 13:08:08 +0200 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2013-06-10 15:15:24 +0200 |
commit | 78b3dc6eea23a728a20947ccc425a7860ef39d97 (patch) | |
tree | e9fea9b0097d7458634c9e2236271201b63dde00 /lib/diameter/src/base/diameter_service.erl | |
parent | f7295b48627fb84bceef61044b6f2d0cbee10c2b (diff) | |
download | otp-78b3dc6eea23a728a20947ccc425a7860ef39d97.tar.gz otp-78b3dc6eea23a728a20947ccc425a7860ef39d97.tar.bz2 otp-78b3dc6eea23a728a20947ccc425a7860ef39d97.zip |
Make spawn options for request processes configurable
That is, for the process that's spawned for each incoming Diameter
request message.
Diffstat (limited to 'lib/diameter/src/base/diameter_service.erl')
-rw-r--r-- | lib/diameter/src/base/diameter_service.erl | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl index 112e83476d..9dd8aafc61 100644 --- a/lib/diameter/src/base/diameter_service.erl +++ b/lib/diameter/src/base/diameter_service.erl @@ -770,10 +770,8 @@ start(Ref, Type, Opts, #state{watchdogT = WatchdogT, = Svc = merge_service(Opts, Svc0), {_,_} = Mask = proplists:get_value(sequence, SvcOpts), - Pid = s(Type, Ref, {diameter_traffic:make_recvdata([SvcName, - PeerT, - Apps, - Mask]), + RecvData = diameter_traffic:make_recvdata([SvcName, PeerT, Apps, Mask]), + Pid = s(Type, Ref, {{spawn_opts([Opts, SvcOpts]), RecvData}, Opts, SvcOpts, Svc}), @@ -787,6 +785,12 @@ start(Ref, Type, Opts, #state{watchdogT = WatchdogT, %% record so that each watchdog may get a different record. This %% record is what is passed back into application callbacks. +spawn_opts(Optss) -> + SpawnOpts = get_value(spawn_opt, Optss, []), + [T || T <- SpawnOpts, + T /= link, + T /= monitor]. + s(Type, Ref, T) -> {_MRef, Pid} = diameter_watchdog:start({Type, Ref}, T), Pid. @@ -986,6 +990,18 @@ keyfind([Key | Rest], Pos, L) -> T end. +%% get_value/3 + +get_value(_, [], Def) -> + Def; +get_value(Key, [L | Rest], Def) -> + case lists:keyfind(Key, 1, L) of + {_,V} -> + V; + _ -> + get_value(Key, Rest, Def) + end. + %% find_outgoing_app/2 find_outgoing_app(Alias, Apps) -> |