ovs-vsctl: Fix memory leaks.
[openvswitch] / ovsdb / jsonrpc-server.c
index 458c52db5a0c07c1a593e728d9857e262fd85d5c..936dd1db37263325b527b55c88769b129ae09049 100644 (file)
@@ -100,6 +100,18 @@ ovsdb_jsonrpc_server_create(struct ovsdb *db)
     return server;
 }
 
+void
+ovsdb_jsonrpc_server_destroy(struct ovsdb_jsonrpc_server *svr)
+{
+    struct shash_node *node, *next;
+
+    SHASH_FOR_EACH_SAFE (node, next, &svr->remotes) {
+        ovsdb_jsonrpc_server_del_remote(node);
+    }
+    shash_destroy(&svr->remotes);
+    free(svr);
+}
+
 /* Sets 'svr''s current set of remotes to the names in 'new_remotes'.  The data
  * values in 'new_remotes' are ignored.
  *
@@ -252,9 +264,11 @@ ovsdb_jsonrpc_session_create(struct ovsdb_jsonrpc_remote *remote,
 static void
 ovsdb_jsonrpc_session_close(struct ovsdb_jsonrpc_session *s)
 {
+    ovsdb_jsonrpc_monitor_remove_all(s);
     jsonrpc_session_close(s->js);
     list_remove(&s->node);
     s->remote->server->n_sessions--;
+    free(s);
 }
 
 static int
@@ -339,6 +353,7 @@ execute_transaction(struct ovsdb_jsonrpc_session *s,
     ovsdb_jsonrpc_trigger_create(s, request->id, request->params);
     request->id = NULL;
     request->params = NULL;
+    jsonrpc_msg_destroy(request);
     return NULL;
 }