]> git.proxmox.com Git - mirror_ovs.git/commitdiff
ovsdb-idl: Fix memory leak sending messages without a session.
authorBen Pfaff <blp@ovn.org>
Sat, 21 Nov 2020 07:17:41 +0000 (23:17 -0800)
committerBen Pfaff <blp@ovn.org>
Sat, 19 Dec 2020 02:32:07 +0000 (18:32 -0800)
When there's no open session, we still have to free the messages that
we make but cannot send.

I'm not confident that these fix actual bugs, because it seems possible
that these code paths can only be hit when the session is nonnull.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ilya Maximets <i.maximets@ovn.org>
lib/ovsdb-idl.c

index fb638c499c5145a55a9a790524d0503d6e89c1ce..02a49b32454b40fbfe512f72d2230cf8efee3aec 100644 (file)
@@ -710,6 +710,8 @@ ovsdb_idl_send_request(struct ovsdb_idl *idl, struct jsonrpc_msg *request)
     idl->request_id = json_clone(request->id);
     if (idl->session) {
         jsonrpc_session_send(idl->session, request);
+    } else {
+        jsonrpc_msg_destroy(request);
     }
 }
 
@@ -4489,8 +4491,10 @@ ovsdb_idl_txn_commit(struct ovsdb_idl_txn *txn)
     if (!any_updates) {
         txn->status = TXN_UNCHANGED;
         json_destroy(operations);
-    } else if (txn->db->idl->session
-               && !jsonrpc_session_send(
+    } else if (!txn->db->idl->session) {
+        txn->status = TXN_TRY_AGAIN;
+        json_destroy(operations);
+    } else if (!jsonrpc_session_send(
                    txn->db->idl->session,
                    jsonrpc_create_request(
                        "transact", operations, &txn->request_id))) {
@@ -5198,6 +5202,8 @@ ovsdb_idl_set_lock(struct ovsdb_idl *idl, const char *lock_name)
         }
         if (idl->session) {
             jsonrpc_session_send(idl->session, msg);
+        } else {
+            jsonrpc_msg_destroy(msg);
         }
     }
 }