[ovs-dev] [PATCH 3/4] ovsdb-idl: Fix memory leak sending messages without a session.

Ben Pfaff blp at ovn.org
Tue Nov 24 22:38:44 UTC 2020


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 at ovn.org>
---
 lib/ovsdb-idl.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c
index a4e04be8f0ed..5502fdab8644 100644
--- a/lib/ovsdb-idl.c
+++ b/lib/ovsdb-idl.c
@@ -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);
     }
 }
 
@@ -4468,8 +4470,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))) {
@@ -5177,6 +5181,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);
         }
     }
 }
-- 
2.26.2



More information about the dev mailing list