diff options
author | Anders Svensson <[email protected]> | 2011-12-13 18:41:39 +0100 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2011-12-16 15:18:04 +0100 |
commit | 719a4747d814913eef9b416da5aa6c638e8d2477 (patch) | |
tree | b1ca2d6ca721baba1ffcfe331f160b5694e394af /lib/diameter/src/base/diameter_service.erl | |
parent | a67091debf20c972dd7ce1a8379fee6673fbe571 (diff) | |
download | otp-719a4747d814913eef9b416da5aa6c638e8d2477.tar.gz otp-719a4747d814913eef9b416da5aa6c638e8d2477.tar.bz2 otp-719a4747d814913eef9b416da5aa6c638e8d2477.zip |
Ensure capabilities exchange can't fail too early
In particular, not before the service process has a monitor on
the watchdog since the watchdog's exit reason is meaningful.
Diffstat (limited to 'lib/diameter/src/base/diameter_service.erl')
-rw-r--r-- | lib/diameter/src/base/diameter_service.erl | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl index 0893956f97..3dfdcee2b2 100644 --- a/lib/diameter/src/base/diameter_service.erl +++ b/lib/diameter/src/base/diameter_service.erl @@ -629,10 +629,6 @@ insert(Tbl, Rec) -> ets:insert(Tbl, Rec), Rec. -monitor(Pid) -> - erlang:monitor(process, Pid), - Pid. - %% Using the process dictionary for the callback state was initially %% just a way to make what was horrendous trace (big state record and %% much else everywhere) somewhat more readable. There's not as much @@ -814,10 +810,10 @@ start(Ref, Type, Opts, #state{peerT = PeerT, service = Svc}) when Type == connect; Type == accept -> - Pid = monitor(s(Type, Ref, {ConnT, - Opts, - SvcName, - merge_service(Opts, Svc)})), + Pid = s(Type, Ref, {ConnT, + Opts, + SvcName, + merge_service(Opts, Svc)}), insert(PeerT, #peer{pid = Pid, type = Type, ref = Ref, @@ -830,7 +826,13 @@ start(Ref, Type, Opts, #state{peerT = PeerT, %% callbacks. s(Type, Ref, T) -> - diameter_watchdog:start({Type, Ref}, T). + case diameter_watchdog:start({Type, Ref}, T) of + {_MRef, Pid} -> + Pid; + Pid when is_pid(Pid) -> %% from old code + erlang:monitor(process, Pid), + Pid + end. %% merge_service/2 |