From aa5a8389ef74ff8529b84d8653365c7c67bb2a3f Mon Sep 17 00:00:00 2001 From: Mark Haverkamp Date: Fri, 30 Jul 2004 17:49:14 +0000 Subject: [PATCH] Fix queue items memory leak. (Logical change 1.49) git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@153 fd59a12c-fef9-0310-b244-a6a79926bd2f --- lib/evt.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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