diff options
| author | Yaniv Kaul <ykaul@redhat.com> | 2019-03-25 19:07:16 +0200 | 
|---|---|---|
| committer | Amar Tumballi <amarts@redhat.com> | 2019-04-15 02:25:26 +0000 | 
| commit | a67929e18a39d5c79a4a7e2b78015523626a367e (patch) | |
| tree | cee5cbfb669df65699d932b2f8944ff28f0a7e7c /libglusterfs | |
| parent | c56f102da21c5b69e656a055aaf736281596284d (diff) | |
graph.c: remove extra gettimeofday() - reuse the graph dob.
It was written just before fill_void() call.
Note that there was a possible overflow if the hostname was too long
(unrelated to this patch), but it is now also fixed, as we use a smaller buffer
for the hostname. This, in turn, forces us to check if gethostname() failed
and add explicitly the terminating null to it.
Change-Id: I45fbc0a8e105f1247f3cbf61befac06fabbaea06
updates: bz#1193929
Signed-off-by: Yaniv Kaul <ykaul@redhat.com>
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/glusterfs/glusterfs.h | 4 | ||||
| -rw-r--r-- | libglusterfs/src/graph.c | 25 | 
2 files changed, 10 insertions, 19 deletions
diff --git a/libglusterfs/src/glusterfs/glusterfs.h b/libglusterfs/src/glusterfs/glusterfs.h index 209bb41307d..cdb6d97eec1 100644 --- a/libglusterfs/src/glusterfs/glusterfs.h +++ b/libglusterfs/src/glusterfs/glusterfs.h @@ -586,20 +586,20 @@ typedef struct _cmd_args cmd_args_t;  struct _glusterfs_graph {      struct list_head list; -    char graph_uuid[128];      struct timeval dob;      void *first;      void *top; /* selected by -n */ -    uint32_t leaf_count;      int xl_count;      int id;   /* Used in logging */      int used; /* Should be set when fuse gets                          first CHILD_UP */      uint32_t volfile_checksum; +    uint32_t leaf_count;      void *last_xl; /* Stores the last xl of the graph, as of now only populated                        in client multiplexed code path */      pthread_mutex_t mutex;      pthread_cond_t child_down_cond; /* for broadcasting CHILD_DOWN */ +    char graph_uuid[128];  };  typedef struct _glusterfs_graph glusterfs_graph_t; diff --git a/libglusterfs/src/graph.c b/libglusterfs/src/graph.c index a492dd891fd..74b568441af 100644 --- a/libglusterfs/src/graph.c +++ b/libglusterfs/src/graph.c @@ -460,27 +460,18 @@ glusterfs_graph_unknown_options(glusterfs_graph_t *graph)      return 0;  } -void -fill_uuid(char *uuid, int size) +static void +fill_uuid(char *uuid, int size, struct timeval tv)  { -    char hostname[256] = { -        0, -    }; -    struct timeval tv = { +    char hostname[50] = {          0,      };      char now_str[64]; -    if (gettimeofday(&tv, NULL) == -1) { -        gf_msg("graph", GF_LOG_ERROR, errno, LG_MSG_GETTIMEOFDAY_FAILED, -               "gettimeofday: " -               "failed"); -    } - -    if (gethostname(hostname, 256) == -1) { +    if (gethostname(hostname, sizeof(hostname) - 1) != 0) {          gf_msg("graph", GF_LOG_ERROR, errno, LG_MSG_GETHOSTNAME_FAILED, -               "gethostname: " -               "failed"); +               "gethostname failed"); +        hostname[sizeof(hostname) - 1] = '\0';      }      gf_time_fmt(now_str, sizeof now_str, tv.tv_sec, gf_timefmt_dirent); @@ -616,7 +607,7 @@ ok:      /* XXX: DOB setting */      gettimeofday(&graph->dob, NULL); -    fill_uuid(graph->graph_uuid, 128); +    fill_uuid(graph->graph_uuid, sizeof(graph->graph_uuid), graph->dob);      graph->id = ctx->graph_id++; @@ -1440,7 +1431,7 @@ glusterfs_muxsvc_setup_parent_graph(glusterfs_ctx_t *ctx, char *name,      ixl = NULL;      gettimeofday(&parent_graph->dob, NULL); -    fill_uuid(parent_graph->graph_uuid, 128); +    fill_uuid(parent_graph->graph_uuid, 128, parent_graph->dob);      parent_graph->id = ctx->graph_id++;      ret = 0;  out:  | 
