diff options
| author | Kotresh HR <khiremat@redhat.com> | 2015-07-23 18:11:23 +0530 | 
|---|---|---|
| committer | Venky Shankar <vshankar@redhat.com> | 2015-08-05 22:40:22 -0700 | 
| commit | 548ee04668b310d5e0c2d0e866677173940db78d (patch) | |
| tree | 6e709b5b69942e1b068eb8ffdfde8ba44767ff25 /geo-replication/src | |
| parent | 611b2545b012d1c5d0700af6bc1a182f7aa2343a (diff) | |
geo-rep: Fix gsyncd failing to start on slave
This is a regression introduced by 2ca6441.
The memory is freed while the caller expects
it be not. The patch fixes the same.
Change-Id: I76d95eef15b3f7af365b392f2426c8b0388254fc
BUG: 1222898
Signed-off-by: Kotresh HR <khiremat@redhat.com>
Reviewed-on: http://review.gluster.org/11751
Reviewed-by: Saravanakumar Arumugam <sarumuga@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Milind Changire <mchangir@redhat.com>
Reviewed-by: Venky Shankar <vshankar@redhat.com>
Diffstat (limited to 'geo-replication/src')
| -rw-r--r-- | geo-replication/src/gsyncd.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/geo-replication/src/gsyncd.c b/geo-replication/src/gsyncd.c index 018b4429176..c9c863ca2fd 100644 --- a/geo-replication/src/gsyncd.c +++ b/geo-replication/src/gsyncd.c @@ -62,14 +62,16 @@ str2argv (char *str, char ***argv)          char *p         = NULL;          char *savetok   = NULL;          char *temp      = NULL; +        char *temp1     = NULL;          int argc        = 0;          size_t argv_len = 32;          int ret         = 0; +        int i           = 0;          assert (str);          temp = str = strdup (str);          if (!str) -                return -1; +                goto error;          *argv = calloc (argv_len, sizeof (**argv));          if (!*argv) @@ -86,7 +88,10 @@ str2argv (char *str, char ***argv)                          if (ret == -1)                                  goto error;                  } -                (*argv)[argc - 1] = p; +                temp1 = strdup (p); +                if (!temp1) +                        goto error; +                (*argv)[argc - 1] = temp1;          }          free(temp); @@ -95,6 +100,9 @@ str2argv (char *str, char ***argv)   error:          fprintf (stderr, "out of memory\n");          free(temp); +        for (i = 0; i < argc - 1; i++) +                free((*argv)[i]); +        free(*argv);          return -1;  } @@ -346,6 +354,7 @@ main (int argc, char **argv)          struct invocable *i     = NULL;          char             *b     = NULL;          char             *sargv = NULL; +        int               j     = 0;  #ifdef USE_LIBGLUSTERFS          glusterfs_ctx_t *ctx = NULL; @@ -410,6 +419,8 @@ main (int argc, char **argv)          fprintf (stderr, "invoking %s in restricted SSH session is not allowed\n",                   b); +        for (j = 1; j < argc; j++) +                free(argv[j]);          free(argv);          return 1;  }  | 
