You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gm...@apache.org on 2018/12/14 01:21:12 UTC

qpid-dispatch git commit: DISPATCH-1214 - Fix a set of valgrind issues. More to come

Repository: qpid-dispatch
Updated Branches:
  refs/heads/master 4edacb72c -> 09c59f23c


DISPATCH-1214 - Fix a set of valgrind issues. More to come


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/09c59f23
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/09c59f23
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/09c59f23

Branch: refs/heads/master
Commit: 09c59f23cbfd29f0d5a09ebe24b00f883d625ec0
Parents: 4edacb7
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Thu Dec 13 16:11:04 2018 -0500
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Thu Dec 13 17:44:44 2018 -0500

----------------------------------------------------------------------
 src/container.c                                       | 14 +++++++++-----
 src/router_core/core_client_api.c                     |  3 +++
 .../modules/address_lookup_client/lookup_client.c     |  4 ++++
 .../address_lookup_server/address_lookup_server.c     |  2 +-
 .../modules/edge_addr_tracking/edge_addr_tracking.c   |  4 ++++
 src/router_core/modules/edge_router/addr_proxy.c      |  3 +++
 src/router_core/router_core.c                         | 13 +++++++++++++
 src/router_core/router_core_private.h                 |  1 +
 src/server.c                                          |  4 ++--
 9 files changed, 40 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/container.c
----------------------------------------------------------------------
diff --git a/src/container.c b/src/container.c
index ea7db15..c3a2361 100644
--- a/src/container.c
+++ b/src/container.c
@@ -395,18 +395,21 @@ static void add_link_to_free_list(qd_pn_free_link_session_list_t *free_link_sess
  * using links/sessions after they are freed. Investigate and simplify if
  * possible.
 */
-void qd_conn_event_batch_complete(qd_container_t *container, qd_connection_t *qd_conn)
+void qd_conn_event_batch_complete(qd_container_t *container, qd_connection_t *qd_conn, bool conn_closed)
 {
     qd_pn_free_link_session_t *to_free = DEQ_HEAD(qd_conn->free_link_session_list);
 
     while(to_free) {
-        if (to_free->pn_link)
-            pn_link_free(to_free->pn_link);
-        if (to_free->pn_session)
-            pn_session_free(to_free->pn_session);
+        if (!conn_closed) {
+            if (to_free->pn_link)
+                pn_link_free(to_free->pn_link);
+            if (to_free->pn_session)
+                pn_session_free(to_free->pn_session);
+        }
         DEQ_REMOVE_HEAD(qd_conn->free_link_session_list);
         free_qd_pn_free_link_session_t(to_free);
         to_free = DEQ_HEAD(qd_conn->free_link_session_list);
+
     }
 }
 
@@ -448,6 +451,7 @@ void qd_container_handle_event(qd_container_t *container, pn_event_t *event,
         if (pn_connection_state(conn) == (PN_LOCAL_ACTIVE | PN_REMOTE_CLOSED)) {
             close_links(container, conn, false);
             pn_connection_close(conn);
+            qd_conn_event_batch_complete(container, qd_conn, true);
         }
         break;
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/router_core/core_client_api.c
----------------------------------------------------------------------
diff --git a/src/router_core/core_client_api.c b/src/router_core/core_client_api.c
index 45c7150..9ef1c4e 100644
--- a/src/router_core/core_client_api.c
+++ b/src/router_core/core_client_api.c
@@ -600,6 +600,8 @@ static void _sender_detached_CT(void *client_context,
 
         _state_updated_CT(client);
     }
+
+    qdr_error_free(error);
     client->sender = NULL;
 }
 
@@ -627,6 +629,7 @@ static void _receiver_detached_CT(void *client_context,
 
         _state_updated_CT(client);
     }
+    qdr_error_free(error);
     client->receiver = NULL;
 }
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/router_core/modules/address_lookup_client/lookup_client.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/address_lookup_client/lookup_client.c b/src/router_core/modules/address_lookup_client/lookup_client.c
index 5e6d4a7..b457304 100644
--- a/src/router_core/modules/address_lookup_client/lookup_client.c
+++ b/src/router_core/modules/address_lookup_client/lookup_client.c
@@ -630,6 +630,9 @@ static uint64_t on_reply(qdr_core_t    *core,
         qcm_addr_lookup_local_search(client, request);
     }
 
+    qd_iterator_free(body);
+    qd_iterator_free(app_properties);
+
     return 0;
 }
 
@@ -729,6 +732,7 @@ static void qcm_addr_lookup_client_init_CT(qdr_core_t *core, void **module_conte
 static void qcm_addr_lookup_client_final_CT(void *module_context)
 {
     qcm_lookup_client_t *client = (qcm_lookup_client_t*) module_context;
+    qdrc_event_unsubscribe_CT(client->core, client->event_sub);
     client->core->addr_lookup_handler = 0;
     free(client);
 }

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/router_core/modules/address_lookup_server/address_lookup_server.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/address_lookup_server/address_lookup_server.c b/src/router_core/modules/address_lookup_server/address_lookup_server.c
index 194dba2..cde606f 100644
--- a/src/router_core/modules/address_lookup_server/address_lookup_server.c
+++ b/src/router_core/modules/address_lookup_server/address_lookup_server.c
@@ -309,9 +309,9 @@ static void _on_first_detach(void *link_context,
     qd_log(_server_state.core->log, QD_LOG_TRACE,
            "Client detached from address lookup server (container=%s, endpoint=%p)",
            epr->container_id, (void *)epr->endpoint);
-
     qdrc_endpoint_detach_CT(_server_state.core, epr->endpoint, 0);
     DEQ_REMOVE(_server_state.endpoints, epr);
+    qdr_error_free(error);
     free__endpoint_ref_t(epr);
 }
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c b/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c
index 715be0b..50e994a 100644
--- a/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c
+++ b/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c
@@ -70,6 +70,9 @@ static qd_message_t *qdcm_edge_create_address_dlv(qdr_core_t *core, qdr_address_
     // Finally, compose and retuen the message so it can be sent out.
     qd_message_compose_3(msg, fld, body);
 
+    qd_compose_free(body);
+    qd_compose_free(fld);
+
     return msg;
 }
 
@@ -130,6 +133,7 @@ static void qdrc_address_endpoint_on_first_detach(void *link_context,
     qdr_addr_tracking_module_context_t *mc = endpoint_state->mc;
     DEQ_REMOVE(mc->endpoint_state_list, endpoint_state);
     free_qdr_addr_endpoint_state_t(endpoint_state);
+    qdr_error_free(error);
 }
 
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/router_core/modules/edge_router/addr_proxy.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/edge_router/addr_proxy.c b/src/router_core/modules/edge_router/addr_proxy.c
index 424bd35..a6c409e 100644
--- a/src/router_core/modules/edge_router/addr_proxy.c
+++ b/src/router_core/modules/edge_router/addr_proxy.c
@@ -343,6 +343,9 @@ static void on_second_attach(void           *link_context,
     qcm_edge_addr_proxy_t *ap = (qcm_edge_addr_proxy_t*) link_context;
 
     qdrc_endpoint_flow_CT(ap->core, ap->tracking_endpoint, INITIAL_CREDIT, false);
+
+    qdr_terminus_free(remote_source);
+    qdr_terminus_free(remote_target);
 }
 
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/router_core/router_core.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index e1225f8..3f21290 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -135,6 +135,12 @@ void qdr_core_free(qdr_core_t *core)
         qdr_core_delete_link_route(core, link_route);
     }
 
+    qdr_auto_link_t *auto_link = 0;
+    while ( (auto_link = DEQ_HEAD(core->auto_links))) {
+        DEQ_REMOVE_HEAD(core->auto_links);
+        qdr_core_delete_auto_link(core, auto_link);
+    }
+
     qdr_exchange_free_all(core);
 
     qdr_address_t *addr = 0;
@@ -398,6 +404,13 @@ void qdr_core_delete_link_route(qdr_core_t *core, qdr_link_route_t *lr)
     free_qdr_link_route_t(lr);
 }
 
+void qdr_core_delete_auto_link(qdr_core_t *core, qdr_auto_link_t *al)
+{
+    free(al->name);
+    free(al->external_addr);
+    free_qdr_auto_link_t(al);
+}
+
 static void free_address_config(qdr_address_config_t *addr)
 {
     free(addr->name);

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/router_core/router_core_private.h
----------------------------------------------------------------------
diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h
index 63fd5df..289614a 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -656,6 +656,7 @@ struct qdr_link_route_t {
 
 ALLOC_DECLARE(qdr_link_route_t);
 void qdr_core_delete_link_route(qdr_core_t *core, qdr_link_route_t *lr);
+void qdr_core_delete_auto_link (qdr_core_t *core,  qdr_auto_link_t *al);
 
 // Core timer related field/data structures
 typedef void (*qdr_timer_cb_t)(qdr_core_t *core, void* context);

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/09c59f23/src/server.c
----------------------------------------------------------------------
diff --git a/src/server.c b/src/server.c
index 5ad6b50..24add4e 100644
--- a/src/server.c
+++ b/src/server.c
@@ -731,7 +731,7 @@ static void invoke_deferred_calls(qd_connection_t *conn, bool discard)
 }
 
 void qd_container_handle_event(qd_container_t *container, pn_event_t *event, pn_connection_t *pn_conn, qd_connection_t *qd_conn);
-void qd_conn_event_batch_complete(qd_container_t *container, qd_connection_t *qd_conn);
+void qd_conn_event_batch_complete(qd_container_t *container, qd_connection_t *qd_conn, bool conn_closed);
 
 static void handle_listener(pn_event_t *e, qd_server_t *qd_server) {
     qd_log_source_t *log = qd_server->log_source;
@@ -1022,7 +1022,7 @@ static void *thread_run(void *arg)
         // processing.
         //
         if (qd_conn)
-            qd_conn_event_batch_complete(qd_server->container, qd_conn);
+            qd_conn_event_batch_complete(qd_server->container, qd_conn, false);
 
         pn_proactor_done(qd_server->proactor, events);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org