[ovs-dev] [daemon 05/10] signals: New function signal_name().

Ethan Jackson ethan at nicira.com
Fri Apr 1 22:17:46 UTC 2011


Looks bueno.

On Thu, Mar 31, 2011 at 4:31 PM, Ben Pfaff <blp at nicira.com> wrote:
> This will acquire a new user in an upcoming commit.
> ---
>  lib/process.c |   16 +++++-----------
>  lib/signals.c |   21 +++++++++++++++++++++
>  lib/signals.h |    2 ++
>  3 files changed, 28 insertions(+), 11 deletions(-)
>
> diff --git a/lib/process.c b/lib/process.c
> index 8263437..f772833 100644
> --- a/lib/process.c
> +++ b/lib/process.c
> @@ -30,6 +30,7 @@
>  #include "fatal-signal.h"
>  #include "list.h"
>  #include "poll-loop.h"
> +#include "signals.h"
>  #include "socket-util.h"
>  #include "util.h"
>  #include "vlog.h"
> @@ -353,17 +354,10 @@ process_status_msg(int status)
>     struct ds ds = DS_EMPTY_INITIALIZER;
>     if (WIFEXITED(status)) {
>         ds_put_format(&ds, "exit status %d", WEXITSTATUS(status));
> -    } else if (WIFSIGNALED(status) || WIFSTOPPED(status)) {
> -        int signr = WIFSIGNALED(status) ? WTERMSIG(status) : WSTOPSIG(status);
> -        const char *name = NULL;
> -#ifdef HAVE_STRSIGNAL
> -        name = strsignal(signr);
> -#endif
> -        ds_put_format(&ds, "%s by signal %d",
> -                      WIFSIGNALED(status) ? "killed" : "stopped", signr);
> -        if (name) {
> -            ds_put_format(&ds, " (%s)", name);
> -        }
> +    } else if (WIFSIGNALED(status)) {
> +        ds_put_format(&ds, "killed (%s)", signal_name(WTERMSIG(status)));
> +    } else if (WIFSTOPPED(status)) {
> +        ds_put_format(&ds, "stopped (%s)", signal_name(WSTOPSIG(status)));
>     } else {
>         ds_put_format(&ds, "terminated abnormally (%x)", status);
>     }
> diff --git a/lib/signals.c b/lib/signals.c
> index e9d2627..b5bacea 100644
> --- a/lib/signals.c
> +++ b/lib/signals.c
> @@ -127,3 +127,24 @@ signal_handler(int signr)
>         signaled[signr] = true;
>     }
>  }
> +
> +/* Returns the name of signal 'signum' as a string.  The string may be in a
> + * static buffer that is reused from one call to the next.
> + *
> + * The string is probably a (possibly multi-word) description of the signal
> + * (e.g. "Hangup") instead of just the stringified version of the macro
> + * (e.g. "SIGHUP"). */
> +const char *
> +signal_name(int signum)
> +{
> +    const char *name = NULL;
> +#ifdef HAVE_STRSIGNAL
> +    name = strsignal(signum);
> +#endif
> +    if (!name) {
> +        static char buffer[7 + INT_STRLEN(int) + 1];
> +        sprintf(buffer, "signal %d", signum);
> +        name = buffer;
> +    }
> +    return name;
> +}
> diff --git a/lib/signals.h b/lib/signals.h
> index 847e58b..41066c4 100644
> --- a/lib/signals.h
> +++ b/lib/signals.h
> @@ -24,4 +24,6 @@ struct signal *signal_register(int signr);
>  bool signal_poll(struct signal *);
>  void signal_wait(struct signal *);
>
> +const char *signal_name(int signum);
> +
>  #endif /* signals.h */
> --
> 1.7.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>



More information about the dev mailing list