ovsdb-client: Fix memory leak reported by valgrind.
authorWilliam Tu <u9012063@gmail.com>
Thu, 7 Jan 2016 23:53:08 +0000 (15:53 -0800)
committerBen Pfaff <blp@ovn.org>
Mon, 11 Jan 2016 17:03:20 +0000 (09:03 -0800)
test case 1427: ovsdb-server combines updates on backlogged connections.
    ovsdb_column_set_add (column.c:233)
    add_column (ovsdb-client.c:730)
    parse_monitor_columns (ovsdb-client.c:787)
    add_monitored_table (ovsdb-client.c:872)
    do_monitor__ (ovsdb-client.c:945)

Reported-by: William Tu <u9012063@gmail.com>
Reported-at: http://openvswitch.org/pipermail/dev/2016-January/064161.html
Signed-off-by: Andy Zhou <azhou@ovn.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
ovsdb/ovsdb-client.c

index 9a6f3e9..7a33ef8 100644 (file)
@@ -878,6 +878,19 @@ add_monitored_table(int argc, char *argv[],
     json_object_put(monitor_requests, table->name, monitor_request_array);
 }
 
+static void
+destroy_monitored_table(struct monitored_table *mts, size_t n)
+{
+    int i;
+
+    for (i = 0; i < n; i++) {
+        struct monitored_table *mt = &mts[i];
+        ovsdb_column_set_destroy(&mt->columns);
+    }
+
+    free(mts);
+}
+
 static void
 do_monitor__(struct jsonrpc *rpc, const char *database,
              enum ovsdb_monitor_version version,
@@ -1025,6 +1038,7 @@ do_monitor__(struct jsonrpc *rpc, const char *database,
         poll_block();
     }
     ovsdb_schema_destroy(schema);
+    destroy_monitored_table(mts, n_mts);
 }
 
 static void