diff options
Diffstat (limited to 'lib/stdlib')
| -rw-r--r-- | lib/stdlib/src/gen_fsm.erl | 15 | ||||
| -rw-r--r-- | lib/stdlib/src/gen_server.erl | 15 | ||||
| -rw-r--r-- | lib/stdlib/test/gen_fsm_SUITE.erl | 28 | ||||
| -rw-r--r-- | lib/stdlib/test/gen_server_SUITE.erl | 22 | 
4 files changed, 65 insertions, 15 deletions
| diff --git a/lib/stdlib/src/gen_fsm.erl b/lib/stdlib/src/gen_fsm.erl index 8d1b46d6ab..7d9960b912 100644 --- a/lib/stdlib/src/gen_fsm.erl +++ b/lib/stdlib/src/gen_fsm.erl @@ -614,12 +614,15 @@ get_msg(Msg) -> Msg.  format_status(Opt, StatusData) ->      [PDict, SysState, Parent, Debug, [Name, StateName, StateData, Mod, _Time]] =  	StatusData, -    NameTag = if is_pid(Name) -> -		      pid_to_list(Name); -		 is_atom(Name) -> -		      Name -	      end, -    Header = lists:concat(["Status for state machine ", NameTag]), +    StatusHdr = "Status for state machine", +    Header = if +		 is_pid(Name) -> +		     lists:concat([StatusHdr, " ", pid_to_list(Name)]); +		 is_atom(Name); is_list(Name) -> +		     lists:concat([StatusHdr, " ", Name]); +		 true -> +		     {StatusHdr, Name} +	     end,      Log = sys:get_debug(log, Debug, []),      DefaultStatus = [{data, [{"StateData", StateData}]}],      Specfic = diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl index dc8e7ecd16..ac81df9cab 100644 --- a/lib/stdlib/src/gen_server.erl +++ b/lib/stdlib/src/gen_server.erl @@ -840,12 +840,15 @@ name_to_pid(Name) ->  %%-----------------------------------------------------------------  format_status(Opt, StatusData) ->      [PDict, SysState, Parent, Debug, [Name, State, Mod, _Time]] = StatusData, -    NameTag = if is_pid(Name) -> -		      pid_to_list(Name); -		 is_atom(Name) -> -		      Name -	      end, -    Header = lists:concat(["Status for generic server ", NameTag]), +    StatusHdr = "Status for generic server", +    Header = if +		 is_pid(Name) -> +		     lists:concat([StatusHdr, " ", pid_to_list(Name)]); +		 is_atom(Name); is_list(Name) -> +		     lists:concat([StatusHdr, " ", Name]); +		 true -> +		     {StatusHdr, Name} +	     end,      Log = sys:get_debug(log, Debug, []),      DefaultStatus = [{data, [{"State", State}]}],      Specfic = diff --git a/lib/stdlib/test/gen_fsm_SUITE.erl b/lib/stdlib/test/gen_fsm_SUITE.erl index d61eeb403b..dd120f8c05 100644 --- a/lib/stdlib/test/gen_fsm_SUITE.erl +++ b/lib/stdlib/test/gen_fsm_SUITE.erl @@ -320,9 +320,32 @@ sys1(Config) when is_list(Config) ->  call_format_status(Config) when is_list(Config) ->      ?line {ok, Pid} = gen_fsm:start(gen_fsm_SUITE, [], []),      ?line Status = sys:get_status(Pid), -    ?line {status, Pid, _Mod, [_PDict, running, _Parent, _, Data]} = Status, +    ?line {status, Pid, _Mod, [_PDict, running, _, _, Data]} = Status,      ?line [format_status_called | _] = lists:reverse(Data), -    ?line stop_it(Pid). +    ?line stop_it(Pid), + +    %% check that format_status can handle a name being an atom (pid is +    %% already checked by the previous test) +    ?line {ok, Pid2} = gen_fsm:start({local, gfsm}, gen_fsm_SUITE, [], []), +    ?line Status2 = sys:get_status(gfsm), +    ?line {status, Pid2, _Mod, [_PDict2, running, _, _, Data2]} = Status2, +    ?line [format_status_called | _] = lists:reverse(Data2), +    ?line stop_it(Pid2), + +    %% check that format_status can handle a name being a term other than a +    %% pid or atom +    GlobalName1 = {global, "CallFormatStatus"}, +    ?line {ok, Pid3} = gen_fsm:start(GlobalName1, gen_fsm_SUITE, [], []), +    ?line Status3 = sys:get_status(GlobalName1), +    ?line {status, Pid3, _Mod, [_PDict3, running, _, _, Data3]} = Status3, +    ?line [format_status_called | _] = lists:reverse(Data3), +    ?line stop_it(Pid3), +    GlobalName2 = {global, {name, "term"}}, +    ?line {ok, Pid4} = gen_fsm:start(GlobalName2, gen_fsm_SUITE, [], []), +    ?line Status4 = sys:get_status(GlobalName2), +    ?line {status, Pid4, _Mod, [_PDict4, running, _, _, Data4]} = Status4, +    ?line [format_status_called | _] = lists:reverse(Data4), +    ?line stop_it(Pid4).  error_format_status(Config) when is_list(Config) ->      ?line error_logger_forwarder:register(), @@ -345,7 +368,6 @@ error_format_status(Config) when is_list(Config) ->      process_flag(trap_exit, OldFl),      ok. -  %% Hibernation  hibernate(suite) -> [];  hibernate(Config) when is_list(Config) -> diff --git a/lib/stdlib/test/gen_server_SUITE.erl b/lib/stdlib/test/gen_server_SUITE.erl index 0966734c89..99388ba2e3 100644 --- a/lib/stdlib/test/gen_server_SUITE.erl +++ b/lib/stdlib/test/gen_server_SUITE.erl @@ -905,6 +905,28 @@ call_format_status(Config) when is_list(Config) ->      ?line Status2 = sys:get_status(call_format_status, 5000),      ?line {status, Pid, _Mod, [_PDict, running, _Parent, _, Data2]} = Status2,      ?line [format_status_called | _] = lists:reverse(Data2), + +    %% check that format_status can handle a name being a pid (atom is +    %% already checked by the previous test) +    ?line {ok, Pid3} = gen_server:start_link(gen_server_SUITE, [], []), +    ?line Status3 = sys:get_status(Pid3), +    ?line {status, Pid3, _Mod, [_PDict3, running, _Parent, _, Data3]} = Status3, +    ?line [format_status_called | _] = lists:reverse(Data3), + +    %% check that format_status can handle a name being a term other than a +    %% pid or atom +    GlobalName1 = {global, "CallFormatStatus"}, +    ?line {ok, Pid4} = gen_server:start_link(GlobalName1, +					     gen_server_SUITE, [], []), +    ?line Status4 = sys:get_status(Pid4), +    ?line {status, Pid4, _Mod, [_PDict4, running, _Parent, _, Data4]} = Status4, +    ?line [format_status_called | _] = lists:reverse(Data4), +    GlobalName2 = {global, {name, "term"}}, +    ?line {ok, Pid5} = gen_server:start_link(GlobalName2, +					     gen_server_SUITE, [], []), +    ?line Status5 = sys:get_status(GlobalName2), +    ?line {status, Pid5, _Mod, [_PDict5, running, _Parent, _, Data5]} = Status5, +    ?line [format_status_called | _] = lists:reverse(Data5),      ok.  %% Verify that error termination correctly calls our format_status/2 fun | 
