summaryrefslogtreecommitdiff
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
commitccdec49d2dc6fb3352efde4bf378a5d74c659d82 (patch)
tree9ef5b851f1c4d8ead5b25ed5e182db130eb32093
parent6668048738245093b48f306cb0eba2aff7d30fd2 (diff)
downloadqpid-python-ccdec49d2dc6fb3352efde4bf378a5d74c659d82.tar.gz
QPID-5216 - Fixed two memory leaks and one uninitialized-data bug.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1530373 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--extras/dispatch/src/message.c2
-rw-r--r--extras/dispatch/src/python_embedded.c5
-rw-r--r--extras/dispatch/src/router_node.c4
-rw-r--r--extras/dispatch/src/router_pynode.c4
4 files changed, 12 insertions, 3 deletions
diff --git a/extras/dispatch/src/message.c b/extras/dispatch/src/message.c
index 772c0d4e16..4d4f37a546 100644
--- a/extras/dispatch/src/message.c
+++ b/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/extras/dispatch/src/python_embedded.c b/extras/dispatch/src/python_embedded.c
index 6b235c7406..325ce5c63b 100644
--- a/extras/dispatch/src/python_embedded.c
+++ b/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/extras/dispatch/src/router_node.c b/extras/dispatch/src/router_node.c
index 244a438667..7a08500cb5 100644
--- a/extras/dispatch/src/router_node.c
+++ b/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/extras/dispatch/src/router_pynode.c b/extras/dispatch/src/router_pynode.c
index d6286614df..83ff43eb87 100644
--- a/extras/dispatch/src/router_pynode.c
+++ b/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.