X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=lib%2Fvlog.c;h=d26e61391e58f7fc3b52171f87faf1e0abfc9794;hb=e2a3d183f60b93265c095ede1379194916444822;hp=07ba5e029092456abd59371e27e945fdb25816b4;hpb=2a3e30b27d11f77a8ce8ff87d0a2c0eaa925eaff;p=openvswitch diff --git a/lib/vlog.c b/lib/vlog.c index 07ba5e02..d26e6139 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -439,12 +439,12 @@ vlog_unixctl_set(struct unixctl_conn *conn, int argc, const char *argv[], for (i = 1; i < argc; i++) { char *msg = vlog_set_levels_from_string(argv[i]); if (msg) { - unixctl_command_reply(conn, 501, msg); + unixctl_command_reply_error(conn, msg); free(msg); return; } } - unixctl_command_reply(conn, 202, NULL); + unixctl_command_reply(conn, NULL); } static void @@ -452,7 +452,7 @@ vlog_unixctl_list(struct unixctl_conn *conn, int argc OVS_UNUSED, const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED) { char *msg = vlog_get_levels(); - unixctl_command_reply(conn, 200, msg); + unixctl_command_reply(conn, msg); free(msg); } @@ -463,12 +463,12 @@ vlog_unixctl_reopen(struct unixctl_conn *conn, int argc OVS_UNUSED, if (log_file_name) { int error = vlog_reopen_log_file(); if (error) { - unixctl_command_reply(conn, 503, strerror(errno)); + unixctl_command_reply_error(conn, strerror(errno)); } else { - unixctl_command_reply(conn, 202, NULL); + unixctl_command_reply(conn, NULL); } } else { - unixctl_command_reply(conn, 403, "Logging to file not configured"); + unixctl_command_reply_error(conn, "Logging to file not configured"); } } @@ -477,6 +477,7 @@ vlog_unixctl_reopen(struct unixctl_conn *conn, int argc OVS_UNUSED, void vlog_init(void) { + static char *program_name_copy; time_t now; if (vlog_inited) { @@ -484,15 +485,21 @@ vlog_init(void) } vlog_inited = true; - openlog(program_name, LOG_NDELAY, LOG_DAEMON); + /* openlog() is allowed to keep the pointer passed in, without making a + * copy. The daemonize code sometimes frees and replaces 'program_name', + * so make a private copy just for openlog(). (We keep a pointer to the + * private copy to suppress memory leak warnings in case openlog() does + * make its own copy.) */ + program_name_copy = program_name ? xstrdup(program_name) : NULL; + openlog(program_name_copy, LOG_NDELAY, LOG_DAEMON); now = time_wall(); if (now < 0) { struct tm tm; char s[128]; - localtime_r(&now, &tm); - strftime(s, sizeof s, "%a, %d %b %Y %H:%M:%S %z", &tm); + gmtime_r(&now, &tm); + strftime(s, sizeof s, "%a, %d %b %Y %H:%M:%S", &tm); VLOG_ERR("current time is negative: %s (%ld)", s, (long int) now); } @@ -762,28 +769,15 @@ vlog_should_drop(const struct vlog_module *module, enum vlog_level level, return true; } - if (rl->tokens < VLOG_MSG_TOKENS) { + if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS)) { time_t now = time_now(); - if (rl->last_fill > now) { - /* Last filled in the future? Time must have gone backward, or - * 'rl' has not been used before. */ - rl->tokens = rl->burst; - } else if (rl->last_fill < now) { - unsigned int add = sat_mul(rl->rate, now - rl->last_fill); - unsigned int tokens = sat_add(rl->tokens, add); - rl->tokens = MIN(tokens, rl->burst); - rl->last_fill = now; - } - if (rl->tokens < VLOG_MSG_TOKENS) { - if (!rl->n_dropped) { - rl->first_dropped = now; - } - rl->last_dropped = now; - rl->n_dropped++; - return true; + if (!rl->n_dropped) { + rl->first_dropped = now; } + rl->last_dropped = now; + rl->n_dropped++; + return true; } - rl->tokens -= VLOG_MSG_TOKENS; if (rl->n_dropped) { time_t now = time_now();