diff --git a/lib/evt.c b/lib/evt.c index 9c4d9e9c..c829d619 100644 --- a/lib/evt.c +++ b/lib/evt.c @@ -180,11 +180,28 @@ struct message_overlay { static void evtHandleInstanceDestructor(void *instance) { struct event_instance *evti = instance; + void **msg; + int empty; + /* + * Empty out the queue if there are any pending messages + */ + while ((saQueueIsEmpty(&evti->ei_inq, &empty) == SA_OK) && !empty) { + saQueueItemGet(&evti->ei_inq, &msg); + saQueueItemRemove(&evti->ei_inq); + free(*msg); + } + + /* + * clean up the queue itself + */ if (evti->ei_inq.items) { free(evti->ei_inq.items); } + /* + * Disconnect from the server + */ if (evti->ei_fd != -1) { shutdown(evti->ei_fd, 0); close(evti->ei_fd); @@ -409,6 +426,7 @@ saEvtDispatch( msg = *queue_msg; memcpy(&dispatch_data, msg, msg->size); saQueueItemRemove(&evti->ei_inq); + free(msg); } else { /* * Queue empty, read response from socket