X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fvlog.h;h=d7d63bf11abe241de290aff91439c8e273bc75e1;hb=98cf638b19c2a5deca603fd4ed90e3b0cbfc7b7e;hp=eeec5fce74b16884c073e39c754917ca23cdaf68;hpb=f1de299e0cee4b438e8d2b535c14ffbb75309a09;p=sliver-openvswitch.git diff --git a/lib/vlog.h b/lib/vlog.h index eeec5fce7..d7d63bf11 100644 --- a/lib/vlog.h +++ b/lib/vlog.h @@ -17,6 +17,15 @@ #ifndef VLOG_H #define VLOG_H 1 +/* Logging. + * + * + * Thread-safety + * ============= + * + * Fully thread safe. + */ + #include #include #include @@ -55,7 +64,7 @@ enum vlog_level vlog_get_level_val(const char *name); #define VLOG_FACILITIES \ VLOG_FACILITY(SYSLOG, "ovs|%05N|%c%T|%p|%m") \ VLOG_FACILITY(CONSOLE, "%D{%Y-%m-%dT%H:%M:%SZ}|%05N|%c%T|%p|%m") \ - VLOG_FACILITY(FILE, "%D{%Y-%m-%dT%H:%M:%SZ}|%05N|%c%T|%p|%m") + VLOG_FACILITY(FILE, "%D{%Y-%m-%dT%H:%M:%S.###Z}|%05N|%c%T|%p|%m") enum vlog_facility { #define VLOG_FACILITY(NAME, PATTERN) VLF_##NAME, VLOG_FACILITIES @@ -79,8 +88,8 @@ struct vlog_module { #if USE_LINKER_SECTIONS #define VLOG_DEFINE_MODULE(MODULE) \ VLOG_DEFINE_MODULE__(MODULE) \ - extern struct vlog_module *vlog_module_ptr_##MODULE; \ - struct vlog_module *vlog_module_ptr_##MODULE \ + extern struct vlog_module *const vlog_module_ptr_##MODULE; \ + struct vlog_module *const vlog_module_ptr_##MODULE \ __attribute__((section("vlog_modules"))) = &VLM_##MODULE #else #define VLOG_DEFINE_MODULE(MODULE) extern struct vlog_module VLM_##MODULE @@ -95,7 +104,7 @@ struct vlog_rate_limit { time_t first_dropped; /* Time first message was dropped. */ time_t last_dropped; /* Time of most recent message drop. */ unsigned int n_dropped; /* Number of messages dropped. */ - pthread_mutex_t mutex; /* Mutual exclusion for rate limit. */ + struct ovs_mutex mutex; /* Mutual exclusion for rate limit. */ }; /* Number of tokens to emit a message. We add 'rate' tokens per millisecond, @@ -110,7 +119,7 @@ struct vlog_rate_limit { 0, /* first_dropped */ \ 0, /* last_dropped */ \ 0, /* n_dropped */ \ - PTHREAD_ADAPTIVE_MUTEX_INITIALIZER /* mutex */ \ + OVS_MUTEX_INITIALIZER /* mutex */ \ } /* Configuring how each module logs messages. */ @@ -132,6 +141,7 @@ int vlog_reopen_log_file(void); /* Initialization. */ void vlog_init(void); +void vlog_enable_async(void); /* Functions for actual logging. */ void vlog(const struct vlog_module *, enum vlog_level, const char *format, ...)