Use gmtime_r() and localtime_r() instead of non-thread-safe versions.
authorBen Pfaff <blp@nicira.com>
Fri, 5 Apr 2013 04:31:15 +0000 (23:31 -0500)
committerBen Pfaff <blp@nicira.com>
Thu, 2 May 2013 22:49:36 +0000 (15:49 -0700)
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/dynamic-string.c
lib/table.c
ovsdb/ovsdb-tool.c
utilities/ovs-ofctl.c

index bd1cf45..c373601 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -184,21 +184,21 @@ ds_put_printable(struct ds *ds, const char *s, size_t n)
 }
 
 /* Writes the current time to 'string' based on 'template'.
- * The current time is either localtime or UTC based on 'utc'. */
+ * The current time is either local time or UTC based on 'utc'. */
 void
 ds_put_strftime(struct ds *ds, const char *template, bool utc)
 {
-    const struct tm *tm;
+    struct tm tm;
     time_t now = time_wall();
     if (utc) {
-        tm = gmtime(&now);
+        gmtime_r(&now, &tm);
     } else {
-        tm = localtime(&now);
+        localtime_r(&now, &tm);
     }
 
     for (;;) {
         size_t avail = ds->string ? ds->allocated - ds->length + 1 : 0;
-        size_t used = strftime(&ds->string[ds->length], avail, template, tm);
+        size_t used = strftime(&ds->string[ds->length], avail, template, &tm);
         if (used) {
             ds->length += used;
             return;
index 15bcec8..266c410 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -222,7 +222,8 @@ static void
 table_format_timestamp__(char *s, size_t size)
 {
     time_t now = time_wall();
-    strftime(s, size, "%Y-%m-%d %H:%M:%S", gmtime(&now));
+    struct tm tm;
+    strftime(s, size, "%Y-%m-%d %H:%M:%S", gmtime_r(&now, &tm));
 }
 
 static void
index b50b39b..fe6ab42 100644 (file)
@@ -519,9 +519,10 @@ do_show_log(int argc, char *argv[])
             date = shash_find_data(json_object(json), "_date");
             if (date && date->type == JSON_INTEGER) {
                 time_t t = json_integer(date);
+                struct tm tm;
                 char s[128];
 
-                strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S", gmtime(&t));
+                strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S", gmtime_r(&t, &tm));
                 printf(" %s", s);
             }
 
index ec775c7..409d640 100644 (file)
@@ -1358,9 +1358,11 @@ monitor_vconn(struct vconn *vconn)
 
             if (timestamp) {
                 time_t now = time_wall();
+                struct tm tm;
                 char s[32];
 
-                strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S: ", gmtime(&now));
+                strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S: ",
+                         gmtime_r(&now, &tm));
                 fputs(s, stderr);
             }