diff --git a/src/bridge.c b/src/bridge.c index 6a8339be..2ec9f75c 100644 --- a/src/bridge.c +++ b/src/bridge.c @@ -244,13 +244,19 @@ void mqtt3_bridge_packet_cleanup(struct mosquitto *context) struct _mosquitto_packet *packet; if(!context) return; - _mosquitto_packet_cleanup(context->current_out_packet); + if(context->current_out_packet){ + _mosquitto_packet_cleanup(context->current_out_packet); + _mosquitto_free(context->current_out_packet); + context->current_out_packet = NULL; + } while(context->out_packet){ _mosquitto_packet_cleanup(context->out_packet); packet = context->out_packet; context->out_packet = context->out_packet->next; _mosquitto_free(packet); } + context->out_packet = NULL; + context->out_packet_last = NULL; _mosquitto_packet_cleanup(&(context->in_packet)); } diff --git a/src/context.c b/src/context.c index 25f9a160..9b200c2f 100644 --- a/src/context.c +++ b/src/context.c @@ -151,8 +151,11 @@ void mqtt3_context_cleanup(struct mosquitto_db *db, struct mosquitto *context, b context->id = NULL; } _mosquitto_packet_cleanup(&(context->in_packet)); - _mosquitto_packet_cleanup(context->current_out_packet); - context->current_out_packet = NULL; + if(context->current_out_packet){ + _mosquitto_packet_cleanup(context->current_out_packet); + _mosquitto_free(context->current_out_packet); + context->current_out_packet = NULL; + } while(context->out_packet){ _mosquitto_packet_cleanup(context->out_packet); packet = context->out_packet;