Repository: qpid-dispatch Updated Branches: refs/heads/master ee856b3b9 -> deeb0316b
DISPATCH-245 - More fixes to memory leaks discovered by coverity. Moved code into do while loop and replaced QD_ERROR_RET() with QD_ERROR_BREAK Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/deeb0316 Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/deeb0316 Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/deeb0316 Branch: refs/heads/master Commit: deeb0316b9eaa04b748d5f83d5c772e7ab9754a3 Parents: ee856b3 Author: Ganesh Murthy <[email protected]> Authored: Fri Apr 8 14:59:36 2016 -0400 Committer: Ganesh Murthy <[email protected]> Committed: Fri Apr 8 14:59:36 2016 -0400 ---------------------------------------------------------------------- src/log.c | 21 ++- src/message.c | 17 +- src/router_config.c | 447 ++++++++++++++++++++++++++--------------------- 3 files changed, 275 insertions(+), 210 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/deeb0316/src/log.c ---------------------------------------------------------------------- diff --git a/src/log.c b/src/log.c index f2657e4..4cd52c8 100644 --- a/src/log.c +++ b/src/log.c @@ -452,19 +452,21 @@ qd_error_t qd_log_entity(qd_entity_t *entity) { //Obtain the log_source_lock global lock sys_mutex_lock(log_source_lock); + char* module = 0; + char *output = 0; + char *enable = 0; + do { - char* module = qd_entity_get_string(entity, "module"); + module = qd_entity_get_string(entity, "module"); QD_ERROR_BREAK(); qd_log_source_t *src = qd_log_source_lh(module); /* The original(already existing) log source */ - free(module); if (qd_entity_has(entity, "output")) { - char* output = qd_entity_get_string(entity, "output"); + output = qd_entity_get_string(entity, "output"); QD_ERROR_BREAK(); log_sink_t* sink = log_sink_lh(output); - free(output); QD_ERROR_BREAK(); log_sink_free_lh(src->sink); /* DEFAULT source may already have a sink, so free that sink first */ @@ -475,9 +477,9 @@ qd_error_t qd_log_entity(qd_entity_t *entity) { } if (qd_entity_has(entity, "enable")) { - char *enable = qd_entity_get_string(entity, "enable"); + enable = qd_entity_get_string(entity, "enable"); + QD_ERROR_BREAK(); src->mask = enable_mask(enable); - free(enable); } QD_ERROR_BREAK(); @@ -491,6 +493,13 @@ qd_error_t qd_log_entity(qd_entity_t *entity) { } while(0); + if (module) + free(module); + if (output) + free(output); + if (enable) + free(enable); + sys_mutex_unlock(log_source_lock); return qd_error_code(); http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/deeb0316/src/message.c ---------------------------------------------------------------------- diff --git a/src/message.c b/src/message.c index c5dc028..11e993c 100644 --- a/src/message.c +++ b/src/message.c @@ -100,14 +100,15 @@ static const char REPR_END[] = "}\0"; /* TODO aconway 2014-05-13: more detailed message representation. */ char* qd_message_repr(qd_message_t *msg, char* buffer, size_t len) { - qd_message_check(msg, QD_DEPTH_BODY); - char *begin = buffer; - char *end = buffer + len - sizeof(REPR_END); /* Save space for ending */ - aprintf(&begin, end, "Message{", msg); - copy_field(msg, QD_FIELD_TO, INT_MAX, "to='", "'", &begin, end); - copy_field(msg, QD_FIELD_REPLY_TO, INT_MAX, " reply-to='", "'", &begin, end); - copy_field(msg, QD_FIELD_BODY, 16, " body='", "'", &begin, end); - aprintf(&begin, end, "%s", REPR_END); /* We saved space at the beginning. */ + if (qd_message_check(msg, QD_DEPTH_BODY)) { + char *begin = buffer; + char *end = buffer + len - sizeof(REPR_END); /* Save space for ending */ + aprintf(&begin, end, "Message{", msg); + copy_field(msg, QD_FIELD_TO, INT_MAX, "to='", "'", &begin, end); + copy_field(msg, QD_FIELD_REPLY_TO, INT_MAX, " reply-to='", "'", &begin, end); + copy_field(msg, QD_FIELD_BODY, 16, " body='", "'", &begin, end); + aprintf(&begin, end, "%s", REPR_END); /* We saved space at the beginning. */ + } return buffer; } http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/deeb0316/src/router_config.c ---------------------------------------------------------------------- diff --git a/src/router_config.c b/src/router_config.c index cae7e82..c512a31 100644 --- a/src/router_config.c +++ b/src/router_config.c @@ -188,165 +188,205 @@ qd_error_t qd_router_configure_lrp(qd_router_t *router, qd_entity_t *entity) qd_log(router->log_source, QD_LOG_WARNING, "linkRoutePrefix configuration is deprecated, switch to using linkRoute instead."); } - char *prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_RET(); - char *connector = qd_entity_get_string(entity, "connector"); QD_ERROR_RET(); - char *direction = qd_entity_get_string(entity, "dir"); QD_ERROR_RET(); + char *prefix = 0; + char *connector = 0; + char *direction = 0; - if (strcmp("in", direction) == 0 || strcmp("both", direction) == 0) - qd_router_add_link_route(router->router_core, prefix, connector, "in"); + do { + prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_BREAK(); + connector = qd_entity_get_string(entity, "connector"); QD_ERROR_BREAK(); + direction = qd_entity_get_string(entity, "dir"); QD_ERROR_BREAK(); - if (strcmp("out", direction) == 0 || strcmp("both", direction) == 0) - qd_router_add_link_route(router->router_core, prefix, connector, "out"); + if (strcmp("in", direction) == 0 || strcmp("both", direction) == 0) + qd_router_add_link_route(router->router_core, prefix, connector, "in"); + + if (strcmp("out", direction) == 0 || strcmp("both", direction) == 0) + qd_router_add_link_route(router->router_core, prefix, connector, "out"); + + } while (0); + + if (prefix) + free(prefix); + if (connector) + free(connector); + if (direction) + free(direction); - free(prefix); - free(connector); - free(direction); return qd_error_code(); } qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity) { - char *name = qd_entity_opt_string(entity, "name", 0); QD_ERROR_RET(); - char *prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_RET(); - char *distrib = qd_entity_opt_string(entity, "distribution", 0); QD_ERROR_RET(); - bool waypoint = qd_entity_opt_bool(entity, "waypoint", false); QD_ERROR_RET(); - long in_phase = qd_entity_opt_long(entity, "ingressPhase", -1); QD_ERROR_RET(); - long out_phase = qd_entity_opt_long(entity, "egressPhase", -1); QD_ERROR_RET(); + char *name = 0; + char *prefix = 0; + char *distrib = 0; - // - // Formulate this configuration create it through the core management API. - // - qd_composed_field_t *body = qd_compose_subfield(0); - qd_compose_start_map(body); + do { + name = qd_entity_opt_string(entity, "name", 0); QD_ERROR_BREAK(); + prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_BREAK(); + distrib = qd_entity_opt_string(entity, "distribution", 0); QD_ERROR_BREAK(); - if (name) { - qd_compose_insert_string(body, "name"); - qd_compose_insert_string(body, name); - } + bool waypoint = qd_entity_opt_bool(entity, "waypoint", false); + long in_phase = qd_entity_opt_long(entity, "ingressPhase", -1); + long out_phase = qd_entity_opt_long(entity, "egressPhase", -1); - if (prefix) { - qd_compose_insert_string(body, "prefix"); - qd_compose_insert_string(body, prefix); - } + // + // Formulate this configuration create it through the core management API. + // + qd_composed_field_t *body = qd_compose_subfield(0); + qd_compose_start_map(body); - if (distrib) { - qd_compose_insert_string(body, "distribution"); - qd_compose_insert_string(body, distrib); - } + if (name) { + qd_compose_insert_string(body, "name"); + qd_compose_insert_string(body, name); + } - qd_compose_insert_string(body, "waypoint"); - qd_compose_insert_bool(body, waypoint); + if (prefix) { + qd_compose_insert_string(body, "prefix"); + qd_compose_insert_string(body, prefix); + } - if (in_phase >= 0) { - qd_compose_insert_string(body, "ingressPhase"); - qd_compose_insert_int(body, in_phase); - } + if (distrib) { + qd_compose_insert_string(body, "distribution"); + qd_compose_insert_string(body, distrib); + } - if (out_phase >= 0) { - qd_compose_insert_string(body, "egressPhase"); - qd_compose_insert_int(body, out_phase); - } + qd_compose_insert_string(body, "waypoint"); + qd_compose_insert_bool(body, waypoint); - qd_compose_end_map(body); + if (in_phase >= 0) { + qd_compose_insert_string(body, "ingressPhase"); + qd_compose_insert_int(body, in_phase); + } - int length = 0; - qd_buffer_list_t buffers; + if (out_phase >= 0) { + qd_compose_insert_string(body, "egressPhase"); + qd_compose_insert_int(body, out_phase); + } - qd_compose_take_buffers(body, &buffers); - qd_compose_free(body); + qd_compose_end_map(body); - qd_buffer_t *buf = DEQ_HEAD(buffers); - while (buf) { - length += qd_buffer_size(buf); - buf = DEQ_NEXT(buf); - } + int length = 0; + qd_buffer_list_t buffers; - 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); + qd_compose_take_buffers(body, &buffers); + qd_compose_free(body); - qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_ADDRESS, 0, in_body, 0); - - free(name); - free(prefix); - free(distrib); - - return qd_error_code(); -} - - -qd_error_t qd_router_configure_link_route(qd_router_t *router, qd_entity_t *entity) -{ - char *name = qd_entity_opt_string(entity, "name", 0); QD_ERROR_RET(); - char *prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_RET(); - char *container = qd_entity_opt_string(entity, "containerId", 0); QD_ERROR_RET(); - char *c_name = qd_entity_opt_string(entity, "connection", 0); QD_ERROR_RET(); - char *distrib = qd_entity_opt_string(entity, "distribution", 0); QD_ERROR_RET(); - char *dir = qd_entity_opt_string(entity, "dir", 0); QD_ERROR_RET(); - - // - // Formulate this configuration as a route and create it through the core management API. - // - qd_composed_field_t *body = qd_compose_subfield(0); - qd_compose_start_map(body); - - if (name) { - qd_compose_insert_string(body, "name"); - qd_compose_insert_string(body, name); - } - - if (prefix) { - qd_compose_insert_string(body, "prefix"); - qd_compose_insert_string(body, prefix); - } - - if (container) { - qd_compose_insert_string(body, "containerId"); - qd_compose_insert_string(body, container); - } + qd_buffer_t *buf = DEQ_HEAD(buffers); + while (buf) { + length += qd_buffer_size(buf); + buf = DEQ_NEXT(buf); + } - if (c_name) { - qd_compose_insert_string(body, "connection"); - qd_compose_insert_string(body, c_name); - } + 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); - if (distrib) { - qd_compose_insert_string(body, "distribution"); - qd_compose_insert_string(body, distrib); - } + qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_ADDRESS, 0, in_body, 0); - if (dir) { - qd_compose_insert_string(body, "dir"); - qd_compose_insert_string(body, dir); - } - qd_compose_end_map(body); + } while(0); - int length = 0; - qd_buffer_list_t buffers; - - qd_compose_take_buffers(body, &buffers); - qd_compose_free(body); + if (name) + free(name); + if (prefix) + free(prefix); + if (distrib) + free(distrib); - qd_buffer_t *buf = DEQ_HEAD(buffers); - while (buf) { - length += qd_buffer_size(buf); - buf = DEQ_NEXT(buf); - } + return qd_error_code(); +} - 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); +qd_error_t qd_router_configure_link_route(qd_router_t *router, qd_entity_t *entity) +{ - free(name); - free(prefix); - free(container); - free(c_name); - free(distrib); - free(dir); + char *name = 0; + char *prefix = 0; + char *container = 0; + char *c_name = 0; + char *distrib = 0; + char *dir = 0; + + do { + name = qd_entity_opt_string(entity, "name", 0); QD_ERROR_BREAK(); + prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_BREAK(); + container = qd_entity_opt_string(entity, "containerId", 0); QD_ERROR_BREAK(); + c_name = qd_entity_opt_string(entity, "connection", 0); QD_ERROR_BREAK(); + distrib = qd_entity_opt_string(entity, "distribution", 0); QD_ERROR_BREAK(); + dir = qd_entity_opt_string(entity, "dir", 0); QD_ERROR_BREAK(); + + // + // Formulate this configuration as a route and create it through the core management API. + // + qd_composed_field_t *body = qd_compose_subfield(0); + qd_compose_start_map(body); + + if (name) { + qd_compose_insert_string(body, "name"); + qd_compose_insert_string(body, name); + } + + if (prefix) { + qd_compose_insert_string(body, "prefix"); + qd_compose_insert_string(body, prefix); + } + + if (container) { + qd_compose_insert_string(body, "containerId"); + qd_compose_insert_string(body, container); + } + + if (c_name) { + qd_compose_insert_string(body, "connection"); + qd_compose_insert_string(body, c_name); + } + + if (distrib) { + qd_compose_insert_string(body, "distribution"); + qd_compose_insert_string(body, distrib); + } + + if (dir) { + qd_compose_insert_string(body, "dir"); + qd_compose_insert_string(body, dir); + } + + qd_compose_end_map(body); + + int length = 0; + qd_buffer_list_t buffers; + + qd_compose_take_buffers(body, &buffers); + qd_compose_free(body); + + qd_buffer_t *buf = DEQ_HEAD(buffers); + while (buf) { + length += qd_buffer_size(buf); + buf = DEQ_NEXT(buf); + } + + 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); + + } while(0); + + if (name) + free(name); + if (prefix) + free(prefix); + if (container) + free(container); + if (c_name) + free(c_name); + if (distrib) + free(distrib); + if (dir) + free(dir); return qd_error_code(); } @@ -354,74 +394,89 @@ qd_error_t qd_router_configure_link_route(qd_router_t *router, qd_entity_t *enti qd_error_t qd_router_configure_auto_link(qd_router_t *router, qd_entity_t *entity) { - char *name = qd_entity_opt_string(entity, "name", 0); QD_ERROR_RET(); - char *addr = qd_entity_get_string(entity, "addr"); QD_ERROR_RET(); - char *dir = qd_entity_get_string(entity, "dir"); QD_ERROR_RET(); - long phase = qd_entity_opt_long(entity, "phase", -1); QD_ERROR_RET(); - char *container = qd_entity_opt_string(entity, "containerId", 0); QD_ERROR_RET(); - char *c_name = qd_entity_opt_string(entity, "connection", 0); QD_ERROR_RET(); - - // - // Formulate this configuration as a route and create it through the core management API. - // - qd_composed_field_t *body = qd_compose_subfield(0); - qd_compose_start_map(body); - - if (name) { - qd_compose_insert_string(body, "name"); - qd_compose_insert_string(body, name); - } - - if (addr) { - qd_compose_insert_string(body, "addr"); - qd_compose_insert_string(body, addr); - } - - if (dir) { - qd_compose_insert_string(body, "dir"); - qd_compose_insert_string(body, dir); - } - - if (phase >= 0) { - qd_compose_insert_string(body, "phase"); - qd_compose_insert_int(body, phase); - } - - if (container) { - qd_compose_insert_string(body, "containerId"); - qd_compose_insert_string(body, container); - } - - if (c_name) { - qd_compose_insert_string(body, "connection"); - qd_compose_insert_string(body, c_name); - } - - qd_compose_end_map(body); - - int length = 0; - qd_buffer_list_t buffers; - - qd_compose_take_buffers(body, &buffers); - qd_compose_free(body); - - qd_buffer_t *buf = DEQ_HEAD(buffers); - while (buf) { - length += qd_buffer_size(buf); - buf = DEQ_NEXT(buf); - } - - 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); - - free(name); - free(addr); - free(dir); - free(container); - free(c_name); + char *name = 0; + char *addr = 0; + char *dir = 0; + char *container = 0; + char *c_name = 0; + + do { + name = qd_entity_opt_string(entity, "name", 0); QD_ERROR_BREAK(); + addr = qd_entity_get_string(entity, "addr"); QD_ERROR_BREAK(); + dir = qd_entity_get_string(entity, "dir"); QD_ERROR_BREAK(); + container = qd_entity_opt_string(entity, "containerId", 0); QD_ERROR_BREAK(); + c_name = qd_entity_opt_string(entity, "connection", 0); QD_ERROR_BREAK(); + long phase = qd_entity_opt_long(entity, "phase", -1); QD_ERROR_BREAK(); + + // + // Formulate this configuration as a route and create it through the core management API. + // + qd_composed_field_t *body = qd_compose_subfield(0); + qd_compose_start_map(body); + + if (name) { + qd_compose_insert_string(body, "name"); + qd_compose_insert_string(body, name); + } + + if (addr) { + qd_compose_insert_string(body, "addr"); + qd_compose_insert_string(body, addr); + } + + if (dir) { + qd_compose_insert_string(body, "dir"); + qd_compose_insert_string(body, dir); + } + + if (phase >= 0) { + qd_compose_insert_string(body, "phase"); + qd_compose_insert_int(body, phase); + } + + if (container) { + qd_compose_insert_string(body, "containerId"); + qd_compose_insert_string(body, container); + } + + if (c_name) { + qd_compose_insert_string(body, "connection"); + qd_compose_insert_string(body, c_name); + } + + qd_compose_end_map(body); + + int length = 0; + qd_buffer_list_t buffers; + + qd_compose_take_buffers(body, &buffers); + qd_compose_free(body); + + qd_buffer_t *buf = DEQ_HEAD(buffers); + while (buf) { + length += qd_buffer_size(buf); + buf = DEQ_NEXT(buf); + } + + 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); + + } while (0); + + + if (name) + free(name); + if (addr) + free(addr); + if (dir) + free(dir); + if (container) + free(container); + if (c_name) + free(c_name); return qd_error_code(); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
