Signed-off-by: Ben Pfaff <b...@nicira.com> --- lib/daemon.c | 4 ++-- lib/util.c | 18 ++++++++++++++++-- lib/util.h | 4 +++- lib/vlog.c | 3 +++ 4 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/lib/daemon.c b/lib/daemon.c index edeeca2..98f30d7 100644 --- a/lib/daemon.c +++ b/lib/daemon.c @@ -400,7 +400,7 @@ monitor_daemon(pid_t daemon_pid) char *status_msg; int crashes; - subprogram_name = "monitor"; + set_subprogram_name("monitor"); status_msg = xstrdup("healthy"); last_restart = TIME_MIN; crashes = 0; @@ -470,7 +470,7 @@ monitor_daemon(pid_t daemon_pid) /* Running in new daemon process. */ proctitle_restore(); - subprogram_name = ""; + set_subprogram_name(""); } /* Close standard file descriptors (except any that the client has requested we diff --git a/lib/util.c b/lib/util.c index 8e628cc..bd88355 100644 --- a/lib/util.c +++ b/lib/util.c @@ -38,8 +38,8 @@ COVERAGE_DEFINE(util_xalloc); /* argv[0] without directory names. */ const char *program_name; -/* Ordinarily "" but set to "monitor" for a monitor process. */ -const char *subprogram_name = ""; +/* Name for the currently running thread or process. */ +DEFINE_PER_THREAD_MALLOCED_DATA(char *, subprogram_name); /* --version option output. */ static char *program_version; @@ -280,6 +280,7 @@ ovs_error(int err_no, const char *format, ...) void ovs_error_valist(int err_no, const char *format, va_list args) { + const char *subprogram_name = get_subprogram_name(); int save_errno = errno; if (subprogram_name[0]) { @@ -384,6 +385,19 @@ set_program_name__(const char *argv0, const char *version, const char *date, } } +const char * +get_subprogram_name(void) +{ + const char *name = subprogram_name_get(); + return name ? name : ""; +} + +void +set_subprogram_name(const char *name) +{ + free(subprogram_name_set(xstrdup(name))); +} + /* Returns a pointer to a string describing the program version. The * caller must not modify or free the returned string. */ diff --git a/lib/util.h b/lib/util.h index 080fe05..2159594 100644 --- a/lib/util.h +++ b/lib/util.h @@ -86,7 +86,6 @@ void ovs_assert_failure(const char *, const char *, const char *) NO_RETURN; (TYPE) (POINTER)) extern const char *program_name; -extern const char *subprogram_name; /* Returns the number of elements in ARRAY. */ #define ARRAY_SIZE(ARRAY) (sizeof ARRAY / sizeof *ARRAY) @@ -203,6 +202,9 @@ void set_program_name__(const char *name, const char *version, #define set_program_name(name) \ set_program_name__(name, VERSION, __DATE__, __TIME__) +const char *get_subprogram_name(void); +void set_subprogram_name(const char *name); + const char *get_program_version(void); void ovs_print_version(uint8_t min_ofp, uint8_t max_ofp); diff --git a/lib/vlog.c b/lib/vlog.c index db13c85..b07fd91 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -672,6 +672,7 @@ format_log_message(const struct vlog_module *module, enum vlog_level level, ds_clear(s); for (p = facilities[facility].pattern; *p != '\0'; ) { + const char *subprogram_name; enum { LEFT, RIGHT } justify = RIGHT; int pad = '0'; size_t length, field, used; @@ -739,9 +740,11 @@ format_log_message(const struct vlog_module *module, enum vlog_level level, ds_put_format(s, "%lld", time_msec() - time_boot_msec()); break; case 't': + subprogram_name = get_subprogram_name(); ds_put_cstr(s, subprogram_name[0] ? subprogram_name : "main"); break; case 'T': + subprogram_name = get_subprogram_name(); if (subprogram_name[0]) { ds_put_format(s, "(%s)", subprogram_name); } -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev