Skip to content

Commit 979481a

Browse files
committed
DISPATCH-1962 Fix leak of qdr_core_subscribe
1 parent f91bc2c commit 979481a

File tree

3 files changed

+13
-31
lines changed

3 files changed

+13
-31
lines changed

src/router_core/modules/mobile_sync/mobile.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -936,14 +936,11 @@ static void qcm_mobile_sync_final_CT(void *module_context)
936936
{
937937
qdrm_mobile_sync_t *msync = (qdrm_mobile_sync_t*) module_context;
938938

939-
qdr_core_unsubscribe(msync->message_sub1);
940-
qdr_core_unsubscribe(msync->message_sub2);
941939
qdrc_event_unsubscribe_CT(msync->core, msync->event_sub);
942940
qdr_core_timer_free_CT(msync->core, msync->timer);
943941

944-
//
945-
// Don't explicitly unsubscribe the addresses, these are already gone at module-final time. // TODO: appears not?
946-
//
942+
qdr_core_unsubscribe(msync->message_sub1);
943+
qdr_core_unsubscribe(msync->message_sub2);
947944

948945
free(msync);
949946
}

src/router_core/router_core.c

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,6 @@ void qdr_core_free(qdr_core_t *core)
150150
core->router_id = 0;
151151
core->router_area = 0;
152152

153-
// I have to first run qdrc_endpoint_do_cleanup_CT src/router_core/core_link_endpoint.c:241
154-
// and only then qcm_edge_router_final_CT src/router_core/modules/edge_router/module.c:59
155-
156153
qdr_link_route_t *link_route = 0;
157154
while ( (link_route = DEQ_HEAD(core->link_routes))) {
158155
DEQ_REMOVE_HEAD(core->link_routes);
@@ -295,9 +292,20 @@ void qdr_core_free(qdr_core_t *core)
295292
// Drain the general work lists
296293
qdr_general_handler(core);
297294

295+
// at this point all the conn identifiers have been freed
296+
qd_hash_free(core->conn_id_hash);
297+
298+
qdr_agent_free(core->mgmt_agent);
299+
298300
//
299301
// Free the core resources
300302
//
303+
if (core->routers_by_mask_bit) free(core->routers_by_mask_bit);
304+
if (core->control_links_by_mask_bit) free(core->control_links_by_mask_bit);
305+
if (core->data_links_by_mask_bit) free(core->data_links_by_mask_bit);
306+
if (core->neighbor_free_mask) qd_bitmask_free(core->neighbor_free_mask);
307+
if (core->rnode_conns_by_mask_bit) free(core->rnode_conns_by_mask_bit);
308+
301309
sys_thread_free(core->thread);
302310
sys_cond_free(core->action_cond);
303311
sys_mutex_free(core->action_lock);
@@ -311,17 +319,6 @@ void qdr_core_free(qdr_core_t *core)
311319
}
312320
}
313321

314-
// at this point all the conn identifiers have been freed
315-
qd_hash_free(core->conn_id_hash);
316-
317-
qdr_agent_free(core->mgmt_agent);
318-
319-
if (core->routers_by_mask_bit) free(core->routers_by_mask_bit);
320-
if (core->control_links_by_mask_bit) free(core->control_links_by_mask_bit);
321-
if (core->data_links_by_mask_bit) free(core->data_links_by_mask_bit);
322-
if (core->neighbor_free_mask) qd_bitmask_free(core->neighbor_free_mask);
323-
if (core->rnode_conns_by_mask_bit) free(core->rnode_conns_by_mask_bit);
324-
325322
free(core);
326323
}
327324

tests/lsan.supp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,11 @@ leak:^pni_init_default_logger$
3333
# DISPATCH-1844 - shutdown leak
3434
leak:sys_mutex
3535

36-
# expected, not a bug:
37-
#
38-
#leak:qdr_core_subscribe
39-
4036
# Ubuntu 16.04 (Xenial)
4137
#
4238
leak:_ctypes_alloc_format_string
4339
leak:__strdup
4440

45-
# to be triaged; system_tests_http
46-
leak:^callback_healthz$
47-
leak:^callback_metrics$
48-
49-
# to be triaged; system_tests_http1_adaptor
50-
leak:^pn_condition$
51-
leak:^pn_raw_connection$
52-
5341
####
5442
#### Miscellaneous 3rd party libraries:
5543
####

0 commit comments

Comments
 (0)