[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