[Bug 7705] Everquest II crash - shortly after seeing fixme:dbghelp:SymInitializeW what to do ??

Wine Bugs wine-bugs at winehq.org
Wed Apr 18 17:19:32 CDT 2007


http://bugs.winehq.org/show_bug.cgi?id=7705


andrey.turkin at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrey.turkin at gmail.com




------- Additional Comments From wine at kapila.force9.co.uk  2007-15-03 05:55 -------
Additional Information:

Crash is occurring in the Everquest2.exe process. 
Before the crash, SymInitializeW is called with a process handle 0xffffffff.
process_find_by_handle finds an existing process with this handle.
For some reason, another process structure is allocated after this, so the next
call to process_find_by_handle finds TWO processes with the handle 0xffffffff
and returns the second one (Though changing the code to return the first one
makes no difference).

SymInitializeW returns successfully.

Then SymFromAddr is called a few times, and each time symt_find_nearest returns
FALSE, because the following lines

    symt_get_info(&module->addr_sorttab[0]->symt, TI_GET_ADDRESS, &ref_addr);
    if (addr < ref_addr) return NULL;

This is as far as I have been able to trace it. I cannot run with +relay enabled
as this causes things to slow down so much that the game times out before the
crash. Is there anyway I can enable the + relay from the code? (eg when the
above lines of code are called?



------- Additional Comments From andrey.turkin at gmail.com  2007-18-04 17:19 -------
Native dbghelp.dll use some sort of reference counting for process structure, so
it can recover from multiply SymInitialize/SymCleanup calls with identical
hProcess (native increments refcount, returns TRUE and, strangely enough, sets
last error to ERROR_INVALID_HANDLE).
You can try hacky approach - to return from SymInitialize immediately when
process_find_by_handle finds record (just put return TRUE; instead of
FIXME("What to do?"). Proper way is probably to implement refcounter.

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the wine-bugs mailing list