[libvirt] [PATCH] qemud: fix memory leak in io error events

The extra data isn't being free()'d for IO error events that have a reason. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> --- I wasn't able to test this because the build is broken for me. I won't be able to test it in the field for a couple days. The problem we're seeing is a rather fast memory leak that exhausts all system memory. I believe the source of the leak is that our underlying storage is throwing an I/O error and libvirt is not properly freeing the resulting IO error event object. Because the storage is constantly generating errors and the guest is constantly reading, memory is just consumed until the system is exhausted. diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c index e88aafe..5f086bd 100644 --- a/src/conf/domain_event.c +++ b/src/conf/domain_event.c @@ -472,6 +472,7 @@ void virDomainEventFree(virDomainEventPtr event) return; switch (event->eventID) { + case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON: case VIR_DOMAIN_EVENT_ID_IO_ERROR: VIR_FREE(event->data.ioError.srcPath); VIR_FREE(event->data.ioError.devAlias); -- 1.7.0.4

On Wed, Dec 01, 2010 at 09:29:31AM -0600, Anthony Liguori wrote:
The extra data isn't being free()'d for IO error events that have a reason.
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> --- I wasn't able to test this because the build is broken for me. I won't be able to test it in the field for a couple days.
The problem we're seeing is a rather fast memory leak that exhausts all system memory. I believe the source of the leak is that our underlying storage is throwing an I/O error and libvirt is not properly freeing the resulting IO error event object.
Because the storage is constantly generating errors and the guest is constantly reading, memory is just consumed until the system is exhausted.
diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c index e88aafe..5f086bd 100644 --- a/src/conf/domain_event.c +++ b/src/conf/domain_event.c @@ -472,6 +472,7 @@ void virDomainEventFree(virDomainEventPtr event) return;
switch (event->eventID) { + case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON: case VIR_DOMAIN_EVENT_ID_IO_ERROR: VIR_FREE(event->data.ioError.srcPath); VIR_FREE(event->data.ioError.devAlias);
ACK Daniel

On 12/01/2010 08:31 AM, Daniel P. Berrange wrote:
On Wed, Dec 01, 2010 at 09:29:31AM -0600, Anthony Liguori wrote:
The extra data isn't being free()'d for IO error events that have a reason.
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
switch (event->eventID) { + case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON: case VIR_DOMAIN_EVENT_ID_IO_ERROR: VIR_FREE(event->data.ioError.srcPath); VIR_FREE(event->data.ioError.devAlias);
ACK
Pushed now. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org
participants (3)
-
Anthony Liguori
-
Daniel P. Berrange
-
Eric Blake