A crash destroying imagelists

Duane Clark dclark at akamail.com
Sun Dec 22 13:50:36 CST 2002


Duane Clark wrote:
> I am trying to track down a crash when exiting an application. Here is 
> what I think are relevant parts of the trace. Does it appear that I am 
> in the right area? Any hints on how to proceed would be appreciated.

I think the problem comes down to this. The application explicitly 
destroys the imagelist that belongs to a listview:

> 08073208:Call comctl32.ImageList_Destroy(41691ba0) ret=005027f5
 > ...

That area is then freed. When freed, COMCTL32_Free writes prev and next 
entries into himl.

> trace:commctrl:COMCTL32_Free (0x41691ba0)
> trace:heap:RtlFreeHeap (0x41690000,00000002,41691ba0): returning TRUE
> 08073208:Ret  comctl32.ImageList_Destroy() retval=00000001 ret=005027f5
 > ...

Then LISTVIEW_NCDestroy is called.

> 
 > trace:listview:LISTVIEW_NCDestroy ()
 > trace:listview:LISTVIEW_DeleteAllItems ()
 > trace:commctrl:DPA_DeleteAllPtrs (0x41690d98)
> ... 
> trace:listview:notify_hdr   <= 0
> trace:listview:LISTVIEW_NCDestroy Start destroying data structures.
> ...

The listview does not know that the imagelist was already destroyed, so 
it again calls ImageList_Destroy.

> trace:listview:LISTVIEW_NCDestroy Start destroying image lists.
> 08073208:Call gdi32.DeleteObject(aaaaaaaa) ret=409fcadd
> 08073208:Ret  gdi32.DeleteObject() retval=00000000 ret=409fcadd
> 08073208:Call gdi32.DeleteObject(aaaaaaaa) ret=409fcaea
> 08073208:Ret  gdi32.DeleteObject() retval=00000000 ret=409fcaea
> 08073208:Call gdi32.DeleteObject(aaaaaaaa) ret=409fcaf7
> 08073208:Ret  gdi32.DeleteObject() retval=00000000 ret=409fcaf7
> 08073208:Call gdi32.DeleteObject(aaaaaaaa) ret=409fcb04
> 08073208:Ret  gdi32.DeleteObject() retval=00000000 ret=409fcb04

At the end of ImageList_Destroy, there is a call to ZeroMemory, which 
obliterates the prev and next pointers which had been written there. 
Then another COMCTL32_Free call detects the error. At least I assume it 
is an error.

> trace:commctrl:COMCTL32_Free (0x41691ba0)
> err:heap:HEAP_ValidateFreeArena Heap 41690000: bad next ptr 00000000 for   arena 41691b98






More information about the wine-devel mailing list