[ovs-dev] [PATCH] Use gmtime_r() and localtime_r() instead of non-thread-safe versions.

Andy Zhou azhou at nicira.com
Thu May 2 22:02:36 UTC 2013


Looks good with the changes.  I am a bit uncomfortable with places where
strftime() return value is not checked. They are there in the original
code, not strictly related to this change.


On Wed, May 1, 2013 at 11:29 AM, Ben Pfaff <blp at nicira.com> wrote:

> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  lib/dynamic-string.c  |   12 ++++++------
>  lib/table.c           |    5 +++--
>  ovsdb/ovsdb-tool.c    |    3 ++-
>  utilities/ovs-ofctl.c |    4 +++-
>  4 files changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/lib/dynamic-string.c b/lib/dynamic-string.c
> index bd1cf45..c373601 100644
> --- a/lib/dynamic-string.c
> +++ b/lib/dynamic-string.c
> @@ -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;
> diff --git a/lib/table.c b/lib/table.c
> index 15bcec8..266c410 100644
> --- a/lib/table.c
> +++ b/lib/table.c
> @@ -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
> diff --git a/ovsdb/ovsdb-tool.c b/ovsdb/ovsdb-tool.c
> index b50b39b..fe6ab42 100644
> --- a/ovsdb/ovsdb-tool.c
> +++ b/ovsdb/ovsdb-tool.c
> @@ -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);
>              }
>
> diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
> index ec775c7..409d640 100644
> --- a/utilities/ovs-ofctl.c
> +++ b/utilities/ovs-ofctl.c
> @@ -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);
>              }
>
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20130502/8ab5163e/attachment-0003.html>


More information about the dev mailing list