http://bugs.winehq.org/show_bug.cgi?id=25206
--- Comment #9 from ao_main@gmx.net 2010-11-21 15:53:21 CST --- I did some inestigations: - loading anarchy.exe using $WINEDEBUG=+loaddll yields the following: ---------- ... fixme:win:RegisterRawInputDevices (pRawInputDevices=0x33fd68, uiNumDevices=1, cbSize=12) stub! fixme:win:EnumDisplayDevicesW ((null),0,0x33ed80,0x00000000), stub! fixme:ddraw:DirectDrawEnumerateExA flags 0x00000007 not handled fixme:win:EnumDisplayDevicesW ((null),0,0x33e070,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),0,0x33ea80,0x00000000), stub! fixme:x11drv:X11DRV_desktop_SetCurrentMode Cannot change screen BPP from 32 to 16 fixme:d3d:swapchain_init Add OpenGL context recreation support to context_validate_onscreen_formats fixme:d3d_surface:IWineD3DBaseSurfaceImpl_Blt Can't handle WINEDDBLT_ASYNC flag right now. fixme:heap:HeapSetInformation 0x0 1 0x0 0 fixme:iphlpapi:NotifyAddrChange (Handle 0x79df490, overlapped 0x2e6b010): stub ----------- And there it hangs. As stated, the Awesomium.dll throws only one line in its log file: ----------- [37:47:25651:FATAL:network_change_notifier_win.cc(54)] Check failed: 997L == ret (997 vs. 50) ----------- network_change_notifier_win.cc is a chromium source file, the calling code seems to be: ----------- ... void NetworkChangeNotifierWin::Impl::WatchForAddressChange() { HANDLE handle = NULL; DWORD ret = NotifyAddrChange(&handle, &addr_overlapped_); CHECK_EQ(ERROR_IO_PENDING, ret); addr_watcher_.StartWatching(addr_overlapped_.hEvent, this); } ... ----------- The process anarchy.exe seems to hang at .StartWatching (its still in the processlist. If i read it correct, the chromium code is installing a watcher for changes in the address (DHCP). The log file entry in awesomium.dll comes from a failing CHECK_EQ (it expects ERROR_IO_PENDING (997), but gets the handle created from the patched iphlpapi_main.c: ----------- DWORD WINAPI NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped) { FIXME("(Handle %p, overlapped %p): stub\n", Handle, overlapped); *Handle = CreateEventW(NULL, FALSE, FALSE, NULL); return *Handle ? ERROR_IO_PENDING : ERROR_NOT_ENOUGH_MEMORY; } ----------- The header documentation for NotifyAddrChange states that if the handle could be returned, NO_ERROR shall be returned. The Patch returns either IO_PENDING or NOT_ENOUGH_MEMORY. Can anybody have a look at this? I am just compiling with ----------- return *Handle ? NO_ERROR : ERROR_NOT_ENOUGH_MEMORY; ----------- to test it out, but i am really a sorcerer's apprentice here.