diff --git a/server/core/dcb.c b/server/core/dcb.c index b187e9952..563ea6f8f 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -255,6 +255,8 @@ dcb_add_to_zombieslist(DCB *dcb) static void dcb_final_free(DCB *dcb) { +DCB_CALLBACK *cb; + CHK_DCB(dcb); ss_info_dassert(dcb->state == DCB_STATE_DISCONNECTED, "dcb not in DCB_STATE_DISCONNECTED state."); @@ -315,6 +317,14 @@ dcb_final_free(DCB *dcb) while ((queue = gwbuf_consume(queue, GWBUF_LENGTH(queue))) != NULL); } + spinlock_acquire(&dcb->cb_lock); + while ((cb = dcb->callbacks) != NULL) + { + dcb->callbacks = cb->next; + free(cb); + } + spinlock_release(&dcb->cb_lock); + bitmask_free(&dcb->memdata.bitmask); simple_mutex_done(&dcb->dcb_read_lock); simple_mutex_done(&dcb->dcb_write_lock); diff --git a/server/modules/routing/binlog/blr.c b/server/modules/routing/binlog/blr.c index 143722a25..6560bd609 100644 --- a/server/modules/routing/binlog/blr.c +++ b/server/modules/routing/binlog/blr.c @@ -398,6 +398,12 @@ int prev_val; router, prev_val-1))); + if (slave->hostname) + free(slave->hostname); + if (slave->user) + free(slave->user); + if (slave->passwd) + free(slave->passwd); free(slave); }