Browse files

fix sys:get_status backward compatibility for sasl release_handler_1

In R13B04 sys:get_status was modified to invoke format_status/2 in the
callback module if the module exports that function. This resulted in
a change to the term returned from calling sys:get_status on the
supervisor module, since supervisor is a gen_server and gen_server
exports format_status. The sasl release_handler_1 module had a
dependency on the pre-R13B04 term returned by sys:get_status when
invoked on a supervisor, so the R13B04 change broke that dependency.

Change release_handler_1 to handle both the pre-R13B04 and R13B04
terms that sys:get_status can return from a supervisor.
  • Loading branch information...
1 parent cd04cdf commit 3cc2cebdd5a009833bca8898a3566b81c80865bc @vinoski committed Mar 26, 2010
Showing with 7 additions and 1 deletion.
  1. +7 −1 lib/sasl/src/release_handler_1.erl
@@ -554,7 +554,13 @@ get_supervisor_module(SupPid) ->
get_supervisor_module1(SupPid) ->
{status, _Pid, {module, _Mod},
[_PDict, _SysState, _Parent, _Dbg, Misc]} = sys:get_status(SupPid),
- [_Name, State, _Type, _Time] = Misc,
+ %% supervisor Misc field changed at R13B04, handle old and new variants here
+ State = case Misc of
+ [_Name, State1, _Type, _Time] ->
+ State1;
+ [_Header, _Data, {data, [{"State", State2}]}] ->
+ State2
+ end,
%% Cannot use #supervisor_state{module = Module} = State.
{ok, element(#supervisor_state.module, State)}.

0 comments on commit 3cc2ceb

Please sign in to comment.