Fix memory leak in _fio_rbd_connect()
authorJevon Qiao <scaleqiao@gmail.com>
Thu, 28 Jul 2016 07:26:38 +0000 (15:26 +0800)
committerJevon Qiao <scaleqiao@gmail.com>
Thu, 28 Jul 2016 07:26:38 +0000 (15:26 +0800)
When running fio with rbd engine and specifying clustername, a piece of
memory will be allocated in _fio_rbd_connect(), but it never gets freed.

Signed-off-by: Jevon Qiao <scaleqiao@gmail.com>
engines/rbd.c

index c5abd2d22629a89dd3450e29f231603861a427bc..c85645aeac3ec921e6b599071e951d45b10ceb7c 100644 (file)
@@ -140,12 +140,17 @@ static int _fio_rbd_connect(struct thread_data *td)
                                client_name = calloc(1, strlen("client.") +
                                                    strlen(o->client_name) + 1);
                                strcat(client_name, "client.");
-                               o->client_name = strcat(client_name,
-                                                       o->client_name);
+                               strcat(client_name, o->client_name);
+                       } else {
+                               client_name = o->client_name;
                        }
                }
+
                r = rados_create2(&rbd->cluster, o->cluster_name,
-                                       o->client_name, 0);
+                                client_name, 0);
+
+               if (client_name && !index(o->client_name, '.'))
+                       free(client_name);
        } else
                r = rados_create(&rbd->cluster, o->client_name);