summaryrefslogtreecommitdiff
path: root/qpid/extras/dispatch
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2013-10-08 17:56:37 +0000
committerTed Ross <tross@apache.org>2013-10-08 17:56:37 +0000
commitcc9eafe0f201aa118cb8c5e230a125797466d37d (patch)
tree9bbaa1c66e356e78a04a714955ed5d06c1f24f8b /qpid/extras/dispatch
parent5e34514e352c9e538234c9a49add49efe3ea9d85 (diff)
downloadqpid-python-cc9eafe0f201aa118cb8c5e230a125797466d37d.tar.gz
QPID-5216 - Fixed two memory leaks and one uninitialized-data bug.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1530373 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/extras/dispatch')
-rw-r--r--qpid/extras/dispatch/src/message.c2
-rw-r--r--qpid/extras/dispatch/src/python_embedded.c5
-rw-r--r--qpid/extras/dispatch/src/router_node.c4
-rw-r--r--qpid/extras/dispatch/src/router_pynode.c4
4 files changed, 12 insertions, 3 deletions
diff --git a/qpid/extras/dispatch/src/message.c b/qpid/extras/dispatch/src/message.c
index 772c0d4e16..4d4f37a546 100644
--- a/qpid/extras/dispatch/src/message.c
+++ b/qpid/extras/dispatch/src/message.c
@@ -474,9 +474,11 @@ dx_parsed_field_t *dx_message_delivery_annotations(dx_message_t *in_msg)
!dx_parse_is_map(content->parsed_delivery_annotations)) {
dx_field_iterator_free(da);
dx_parse_free(content->parsed_delivery_annotations);
+ content->parsed_delivery_annotations = 0;
return 0;
}
+ dx_field_iterator_free(da);
return content->parsed_delivery_annotations;
}
diff --git a/qpid/extras/dispatch/src/python_embedded.c b/qpid/extras/dispatch/src/python_embedded.c
index 6b235c7406..325ce5c63b 100644
--- a/qpid/extras/dispatch/src/python_embedded.c
+++ b/qpid/extras/dispatch/src/python_embedded.c
@@ -467,6 +467,11 @@ static void dx_io_rx_handler(void *context, dx_message_t *msg, int link_id)
Py_DECREF(pValue);
}
sys_mutex_unlock(lock);
+
+ dx_field_iterator_free(ap);
+ dx_field_iterator_free(body);
+ dx_parse_free(ap_map);
+ dx_parse_free(body_map);
}
diff --git a/qpid/extras/dispatch/src/router_node.c b/qpid/extras/dispatch/src/router_node.c
index 244a438667..7a08500cb5 100644
--- a/qpid/extras/dispatch/src/router_node.c
+++ b/qpid/extras/dispatch/src/router_node.c
@@ -585,8 +585,10 @@ static void router_rx_handler(void* context, dx_link_t *link, dx_delivery_t *del
//
// Invoke the in-process handler now that the lock is released.
//
- if (handler)
+ if (handler) {
handler(handler_context, in_process_copy, rlink->mask_bit);
+ dx_free_message(in_process_copy);
+ }
}
diff --git a/qpid/extras/dispatch/src/router_pynode.c b/qpid/extras/dispatch/src/router_pynode.c
index d6286614df..83ff43eb87 100644
--- a/qpid/extras/dispatch/src/router_pynode.c
+++ b/qpid/extras/dispatch/src/router_pynode.c
@@ -68,13 +68,13 @@ static char *dx_add_router(dx_router_t *router, const char *address, int router_
// remote router is looked up.
//
addr = new_dx_address_t();
+ memset(addr, 0, sizeof(dx_address_t));
DEQ_ITEM_INIT(addr);
- addr->handler = 0;
- addr->handler_context = 0;
DEQ_INIT(addr->rlinks);
DEQ_INIT(addr->rnodes);
hash_insert(router->addr_hash, iter, addr, &addr->hash_handle);
DEQ_INSERT_TAIL(router->addrs, addr);
+ dx_field_iterator_free(iter);
//
// Create a router-node record to represent the remote router.