patch for sys:get_status to call format_status/2

Steve Vinoski vinoski@REDACTED
Wed Aug 26 16:49:22 CEST 2009


Back in March of this year the following thread appeared in
erlang-questions regarding the undocumented format_status/2 function that
apparently used to be called by sys:get_status if provided by a behavior
module:

<http://erlang.org/pipermail/erlang-questions/2009-March/042242.html>

I searched back all the way to version R6B but found no code that made
that call except within SASL's si_sasl_supp module, yet I see that
various modules such as gen_server, gen_event, gen_fsm, and os_mon's disksup
and memsup each provide a format_status/2 function, plus the generic
behaviors also check to see if modules implementing them also provide
a format_status/2 function, calling it if they do and thus allowing you
to format how sys:get_status prints out your gen_server, gen_fsm, etc.
state. Seems like a shame to let that code go to waste! :-) I agree with
the originator of that thread that being allowed to provide a
special format_status/2 when implementing a behavior can be very handy, so
below find a simple patch for R13B01 that implements it.

--steve

--- lib/stdlib/src/sys.erl~ 2009-03-12 08:18:15.000000000 -0400
+++ lib/stdlib/src/sys.erl 2009-08-26 01:25:13.000000000 -0400
@@ -245,8 +245,17 @@
     {SysState, {error, {unknown_system_msg, Other}}, Debug, Misc}.

 get_status(SysState, Parent, Mod, Debug, Misc) ->
+    PDict = get(),
+    FmtMisc =
+        case erlang:function_exported(Mod, format_status, 2) of
+            true ->
+                FmtArgs = [PDict, SysState, Parent, Debug, Misc],
+                Mod:format_status(normal, FmtArgs);
+            _ ->
+                Misc
+        end,
     {status, self(), {module, Mod},
-     [get(), SysState, Parent, Debug, Misc]}.
+     [PDict, SysState, Parent, Debug, FmtMisc]}.

 %%-----------------------------------------------------------------
 %% These are the system debug commands.


More information about the erlang-patches mailing list