[xf86-video-intel] pI830->memory_manager is freed twice

Keith Packard keithp at keithp.com
Mon Oct 8 18:23:31 PDT 2007

Just want to get feedback on whether this will create some kind of nasty
leak. I was trashing the libc memory allocator with a double free before
I did this...

commit 751604506176b25d3262639d08680d927c566308
Author: Keith Packard <keithp at koto.keithp.com>
Date:   Mon Oct 8 18:22:10 2007 -0700

    Leave freeing pI830->memory_manager until we're done with it.
    pI830->memory_manager is the DRM memory management segment, and is used
    while cleaning up the X server memory allocations. Freeing it before the
    rest of the memory allocator is cleaned up turns out to be a bad idea.

diff --git a/src/i830_memory.c b/src/i830_memory.c
index cdb7c47..5fc2043 100644
--- a/src/i830_memory.c
+++ b/src/i830_memory.c
@@ -267,10 +267,20 @@ i830_reset_allocations(ScrnInfoPtr pScrn)
     I830Ptr pI830 = I830PTR(pScrn);
     int	    p;
+    i830_memory	*mem, *this;
     /* While there is any memory between the start and end markers, free it. */
-    while (pI830->memory_list->next->next != NULL)
-	i830_free_memory(pScrn, pI830->memory_list->next);
+    for (mem = pI830->memory_list->next; mem->next != NULL;)
+    {
+	this = mem;
+	mem = mem->next;
+#ifdef XF86DRI_MM
+	/* Don't free the DRI memory manager segment; that is still needed */
+	if (this == pI830->memory_manager)
+	    continue;
+	i830_free_memory(pScrn, this);
+    }
     /* Free any allocations in buffer objects */
 #ifdef XF86DRI_MM

keith.packard at intel.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.x.org/archives/xorg/attachments/20071008/9cf5cde6/attachment.pgp>

More information about the xorg mailing list