You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2016/04/01 20:57:58 UTC

qpid-dispatch git commit: DISPATCH-177: (partial) cleanup a few memory leaks.

Repository: qpid-dispatch
Updated Branches:
  refs/heads/master e0f6c6151 -> 31220576d


DISPATCH-177: (partial) cleanup a few memory leaks.


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

Branch: refs/heads/master
Commit: 31220576d54c6c4665d92060db71a883324394b0
Parents: e0f6c61
Author: Kenneth Giusti <kg...@redhat.com>
Authored: Fri Apr 1 13:46:00 2016 -0400
Committer: Kenneth Giusti <kg...@redhat.com>
Committed: Fri Apr 1 14:57:31 2016 -0400

----------------------------------------------------------------------
 src/posix/driver.c                 |  1 +
 src/router_config.c                |  5 +++++
 src/router_core/management_agent.c |  4 +++-
 src/server.c                       | 21 ++++++++++-----------
 4 files changed, 19 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/31220576/src/posix/driver.c
----------------------------------------------------------------------
diff --git a/src/posix/driver.c b/src/posix/driver.c
index 98e1be4..3d4bbca 100644
--- a/src/posix/driver.c
+++ b/src/posix/driver.c
@@ -659,6 +659,7 @@ void qdpn_connector_free(qdpn_connector_t *ctor)
     if (!ctor) return;
 
     if (ctor->driver) qdpn_driver_remove_connector(ctor->driver, ctor);
+    pn_transport_unbind(ctor->transport);
     pn_transport_free(ctor->transport);
     ctor->transport = NULL;
     if (ctor->connection) pn_class_decref(PN_OBJECT, ctor->connection);

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/31220576/src/router_config.c
----------------------------------------------------------------------
diff --git a/src/router_config.c b/src/router_config.c
index 962b5b4..cae7e82 100644
--- a/src/router_config.c
+++ b/src/router_config.c
@@ -93,6 +93,7 @@ qd_error_t qd_router_configure_fixed_address(qd_router_t *router, qd_entity_t *e
 
     qd_field_iterator_t *iter = qd_field_iterator_buffer(DEQ_HEAD(buffers), 0, length);
     qd_parsed_field_t   *in_body = qd_parse(iter);
+    qd_field_iterator_free(iter);
 
     qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_ADDRESS, 0, in_body, 0);
 
@@ -173,6 +174,7 @@ static void qd_router_add_link_route(qdr_core_t *core, const char *prefix, const
 
     qd_field_iterator_t *iter    = qd_field_iterator_buffer(DEQ_HEAD(buffers), 0, length);
     qd_parsed_field_t   *in_body = qd_parse(iter);
+    qd_field_iterator_free(iter);
 
     qdr_manage_create(core, 0, QD_ROUTER_CONFIG_LINK_ROUTE, 0, in_body, 0);
 }
@@ -262,6 +264,7 @@ qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity)
 
     qd_field_iterator_t *iter    = qd_field_iterator_buffer(DEQ_HEAD(buffers), 0, length);
     qd_parsed_field_t   *in_body = qd_parse(iter);
+    qd_field_iterator_free(iter);
 
     qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_ADDRESS, 0, in_body, 0);
 
@@ -334,6 +337,7 @@ qd_error_t qd_router_configure_link_route(qd_router_t *router, qd_entity_t *enti
 
     qd_field_iterator_t *iter    = qd_field_iterator_buffer(DEQ_HEAD(buffers), 0, length);
     qd_parsed_field_t   *in_body = qd_parse(iter);
+    qd_field_iterator_free(iter);
 
     qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_LINK_ROUTE, 0, in_body, 0);
 
@@ -409,6 +413,7 @@ qd_error_t qd_router_configure_auto_link(qd_router_t *router, qd_entity_t *entit
 
     qd_field_iterator_t *iter    = qd_field_iterator_buffer(DEQ_HEAD(buffers), 0, length);
     qd_parsed_field_t   *in_body = qd_parse(iter);
+    qd_field_iterator_free(iter);
 
     qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_AUTO_LINK, 0, in_body, 0);
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/31220576/src/router_core/management_agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/management_agent.c b/src/router_core/management_agent.c
index 19e84dd..f39c8c7 100644
--- a/src/router_core/management_agent.c
+++ b/src/router_core/management_agent.c
@@ -318,7 +318,9 @@ static void qd_core_agent_update_handler(qdr_core_t                 *core,
 
     qd_management_context_t *ctx = qd_management_context(qd_message(), msg, out_body, 0, core, operation_type, 0);
 
-    qd_parsed_field_t *in_body= qd_parse(qd_message_field_iterator(msg, QD_FIELD_BODY));
+    qd_field_iterator_t *iter = qd_message_field_iterator(msg, QD_FIELD_BODY);
+    qd_parsed_field_t *in_body= qd_parse(iter);
+    qd_field_iterator_free(iter);
 
     qdr_manage_update(core, ctx, entity_type, name_iter, identity_iter, in_body, out_body);
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/31220576/src/server.c
----------------------------------------------------------------------
diff --git a/src/server.c b/src/server.c
index e9a6e01..2b5e5c9 100644
--- a/src/server.c
+++ b/src/server.c
@@ -86,6 +86,16 @@ static void free_qd_connection(qd_connection_t *ctx)
         free (ctx->policy_settings);
         ctx->policy_settings = 0;
     }
+    if (ctx->pn_conn) {
+        pn_connection_set_context(ctx->pn_conn, 0);
+        pn_decref(ctx->pn_conn);
+        ctx->pn_conn = NULL;
+    }
+    if (ctx->collector) {
+        pn_collector_free(ctx->collector);
+        ctx->collector = NULL;
+    }
+
     free_qd_connection_t(ctx);
 }
 
@@ -730,7 +740,6 @@ static void *thread_run(void *arg)
     qd_thread_t      *thread    = (qd_thread_t*) arg;
     qd_work_item_t   *work;
     qdpn_connector_t *cxtr;
-    pn_connection_t  *conn;
     qd_connection_t  *ctx;
     int               error;
     int               poll_result;
@@ -937,10 +946,6 @@ static void *thread_run(void *arg)
                 qd_entity_cache_remove(QD_CONNECTION_TYPE, ctx);
                 //
                 // Connector is closed.  Free the context and the connector.
-                //
-                conn = qdpn_connector_connection(cxtr);
-
-                //
                 // If this is a dispatch connector, schedule the re-connect timer
                 //
                 if (ctx->connector) {
@@ -957,12 +962,6 @@ static void *thread_run(void *arg)
                 }
 
                 qdpn_connector_free(cxtr);
-                if (conn) {
-                    pn_connection_set_context(conn, 0);
-                    pn_decref(conn);
-                }
-                if (ctx->collector)
-                    pn_collector_free(ctx->collector);
                 invoke_deferred_calls(ctx, true);  // Discard any pending deferred calls
                 sys_mutex_free(ctx->deferred_call_lock);
                 free_qd_connection(ctx);


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