http://bugs.winehq.org/show_bug.cgi?id=6088
------- Additional Comments From focht@gmx.net 2007-01-04 17:35 ------- Hello,
the executable is packed/protected with Petite 2.x -> must be unpacked/deprotected before doing anything useful with it :)
With that humbug gone it boils down to following..
--- snip crash --- 0009:trace:ole:OleInitialize ((nil)) 0009:trace:ole:CoInitializeEx ((nil), 2) 0009:trace:ole:OleInitialize () - Initializing the OLE libraries 0009:trace:ole:OLEClipbrd_Initialize () 0009:trace:ole:RegisterDragDrop (0x10058,0xadf1f4) 0009:trace:ole:OleUninitialize () 0009:trace:ole:OleUninitialize () - Freeing the last reference count 0009:trace:ole:OLEClipbrd_UnInitialize () 0009:trace:ole:OLEClipbrd_Destroy () 0009:trace:ole:OLEClipbrd_Destroy () - Destroying clipboard data object. 0009:trace:seh:raise_exception code=c0000005 flags=0 addr=0x10 0009:trace:seh:raise_exception info[0]=00000000 0009:trace:seh:raise_exception info[1]=00000010 0009:trace:seh:raise_exception eax=00adf1f4 ebx=6094546c ecx=6094e54c edx=00a9ca90 esi=001845e0 edi=00acdcec 0009:trace:seh:raise_exception ebp=0034f6f0 esp=0034f6d4 cs=0073 ds=007b es=007b fs=0033 gs=003b flags=00210206 --- snip crash ---
From what i've seen it crashes in Drag and Drop uninit in OleUninitialize()
shutdown sequence, e.g. OLEDD_UnInitialize()
--- snip dlls/ole32/ole2.c --- static void OLEDD_UnInitialize(void) { /* * Simply empty the list. */ while (!list_empty(&targetListHead)) { DropTargetNode* curNode; curNode = LIST_ENTRY(list_head(&targetListHead), DropTargetNode, entry); OLEDD_FreeDropTarget(curNode); <--- *boom* } } --- snip dlls/ole32/ole2.c ---
OLEDD_FreeDropTarget -> IDropTarget_Release(dropTargetInfo->dropTarget); I put in a trace directly before:
--- snip --- 0009:trace:ole:OLEDD_FreeDropTarget (0x184608, 0xadf1f4) --- snip ---
Interface pointer matches with the one from RegisterDragDrop(). The only other internal function call which explicitly decrements refcount is RevokeDragDrop() which isnt called.
My guess: either the client itself or some other drop target code in wine does Release() somewhere -> vtable ptr deref on shutdown -> crash.
For verification i incremented the refcount twice in RegisterDragDrop() (2x IDropTarget_AddRef(pDropTarget) ). Seems it helped, doesnt crash in ole shutdown code.
Regards