[erlang-patches] Re: [PATCH] heart: remove garbage appended to heart command

Henrik Nord <>
Wed Apr 6 15:31:52 CEST 2011


On 04/06/2011 02:45 AM, Michael Santos wrote:
> heart:get_cmd/0 is documented to return an empty string if the command is
> cleared. get_cmd/0 returns 2 extra bytes: 1 byte for the trailing null,
> 1 byte from the op (the op is an unsigned char and 2 bytes are allocated
> for it in the returned buffer).
>
> 1>  heart:get_cmd().
> {ok,[0,0]}
> 2>  heart:set_cmd("echo hello").
> ok
> 3>  heart:get_cmd().
> {ok,[101,99,104,111,32,104,101,108,108,111,0,0]}
> 4>  heart:clear_cmd().
> ok
> 5>  heart:get_cmd().
> {ok,[0,99]}
> ---
>   erts/etc/common/heart.c         |    6 +++---
>   lib/kernel/test/heart_SUITE.erl |   13 +++++++++++--
>   2 files changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/erts/etc/common/heart.c b/erts/etc/common/heart.c
> index 778b356..7a5746e 100644
> --- a/erts/etc/common/heart.c
> +++ b/erts/etc/common/heart.c
> @@ -727,16 +727,16 @@ static int
>   heart_cmd_reply(int fd, char *s)
>   {
>     struct msg m;
> -  int len = strlen(s) + 1;	/* Include \0 */
> +  int len = strlen(s);
>
>     /* if s>= MSG_BODY_SIZE, return a write
>      * failure immediately.
>      */
> -  if (len>  sizeof(m.fill))
> +  if (len>= sizeof(m.fill))
>         return -1;
>
>     m.op = HEART_CMD;
> -  m.len = htons(len + 2);	/* Include Op */
> +  m.len = htons(len + 1);	/* Include Op */
>     strcpy((char*)m.fill, s);
>
>     return write_message(fd,&m);
> diff --git a/lib/kernel/test/heart_SUITE.erl b/lib/kernel/test/heart_SUITE.erl
> index 043c753..233e438 100644
> --- a/lib/kernel/test/heart_SUITE.erl
> +++ b/lib/kernel/test/heart_SUITE.erl
> @@ -22,7 +22,7 @@
>
>   -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
>   	 init_per_group/2,end_per_group/2, start/1, restart/1,
> -	 reboot/1, set_cmd/1, clear_cmd/1,
> +	 reboot/1, set_cmd/1, clear_cmd/1, get_cmd/1,
>   	 dont_drop/1, kill_pid/1]).
>
>   -export([init_per_testcase/2, end_per_testcase/2]).
> @@ -58,7 +58,7 @@ end_per_testcase(_Func, Config) ->
>   suite() ->  [{ct_hooks,[ts_install_cth]}].
>
>   all() ->
> -    [start, restart, reboot, set_cmd, clear_cmd, kill_pid].
> +    [start, restart, reboot, set_cmd, clear_cmd, get_cmd, kill_pid].
>
>   groups() ->
>       [].
> @@ -246,6 +246,15 @@ clear_cmd(Config) when is_list(Config) ->
>   	end,
>       ok.
>
> +get_cmd(suite) ->  [];
> +get_cmd(Config) when is_list(Config) ->
> +    ?line {ok, Node} = start_check(slave, heart_test),
> +    Cmd = "test",
> +    ?line ok = rpc:call(Node, heart, set_cmd, [Cmd]),
> +    ?line {ok, Cmd} = rpc:call(Node, heart, get_cmd, []),
> +    stop_node(Node),
> +    ok.
> +
>   dont_drop(suite) ->
>   %%% Removed as it may crash epmd/distribution in colourful
>   %%% ways. While we ARE finding out WHY, it would
>    
Thank you Michael

This is now cooking in 'pu'

-- 
/Henrik Nord Erlang/OTP



More information about the erlang-patches mailing list