Problem in mutex?

Shachar Shemesh wine-devel at shemesh.biz
Fri Aug 27 12:59:04 CDT 2004


Mike Hearn wrote:

>> However, the program doesn't run properly. When running it, I get 
>> deadlocked.
>>
>> Does anyone have any explanation? Is it a bug in my Win32 code?
>
>
> Doubt it, it *looks* OK. But the acid test is to run it on Windows.
>
> I've not used the mutex APIs much though, so could well be wrong.
>
>>> err:ntdll:RtlpWaitForCriticalSection section 0x4017fec0 "?" wait 
>>> timed out in thread 0009, blocked by 0000, retrying (60 sec)
>>
>
> Well, this must be a Wine internal critical section and 0 is an 
> invalid thread ID. So it looks like something is going badly wrong 
> inside Wine.
>
> What does the backtrace of thread 9 look like?
>
> thanks -mike

>
> Wine-dbg>info thread
> process  tid      prio (all id:s are in hex)
> 00000008 (D) Z:\home\sun\sources\wine\threadtest\threadtest.exe
>         00000009    0 <==
> Wine-dbg>bt
> Backtrace:
> =>1 0x400484d1 (0x402fac54)
>   2 0x401e5462 NTDLL_wait_for_multiple_objects+0x122(count=0x0, 
> handles=0x0, flags=0x8, timeout=0x402fad10) 
> [/home/sun/sources/wine/wine/dlls/ntdll/sync.c:587] in ntdll (0x402facf8)
>   3 0x401e39cc usr1_handler+0x4c(__signal=0xa, __context=0x33) 
> [/home/sun/sources/wine/wine/dlls/ntdll/signal_i386.c:1160] in ntdll 
> (0x402fad1c)
>   4 0xffffe420 (0x406bcd98)
>   5 0x401e5462 NTDLL_wait_for_multiple_objects+0x122(count=0x1, 
> handles=0x406bce8c, flags=0xc, timeout=0x406bcebc) 
> [/home/sun/sources/wine/wine/dlls/ntdll/sync.c:587] in ntdll (0x406bce3c)
>   6 0x401e54d6 NtWaitForMultipleObjects+0x66(count=0x1, 
> handles=0x406bce8c, wait_all=0x0, alertable=0x0, timeout=0x406bcebc) 
> [/home/sun/sources/wine/wine/dlls/ntdll/sync.c:605] in ntdll (0x406bce64)
>   7 0x401e552c NtWaitForSingleObject+0x3c(handle=0x2c98, 
> alertable=0x0, timeout=0x406bcebc) 
> [/home/sun/sources/wine/wine/dlls/ntdll/sync.c:614] in ntdll (0x406bce84)
>   8 0x401bfd15 RtlpWaitForCriticalSection+0x115(crit=0x4017fec0) 
> [/home/sun/sources/wine/wine/dlls/ntdll/critsection.c:220] in ntdll 
> (0x406bcf24)
>   9 0x401bffa9 RtlEnterCriticalSection+0x49(crit=0x4017fec0) 
> [/home/sun/sources/wine/wine/dlls/ntdll/critsection.c:298] in ntdll 
> (0x406bcf3c)
>   10 0x406cf980 (0x406bfe90)
>   11 0x405b318afixme:dbghelp:elf_load_debug_info Unsupported Dwarf2 
> information
>  (0x406bff20)
>   12 0x404ffe52 start_process+0xf2(arg=0x0) 
> [/home/sun/sources/wine/wine/dlls/kernel/process.c:1014] in kernel32 
> (0x406bfff4)
>   13 0x4001d151 wine_switch_to_stack+0x11 in libwine.so.1 (0x00000000)

I find that there are several disturbing things here:
1. There is only one process. How did that happen?
2. The debugger cannot load the debug info for my winelib application. 
What the....?
3. When compiling this in Visual Studio 6 and running on wine:

> sun at sun:~/sources/wine/threadtest$ time ../wine/wine Debug/main.exe  > 
> /dev/null
> Program exit 299732
>
> real    0m17.826s
> user    0m3.244s
> sys     0m5.671s

Just for comparison, when running on Windows, I get as far as 298015, 
but in less time.

In order to achieve this, I lowered the stack (second CreateThread 
parameter) to 8*1024, to avoid running out of memory. This does not 
solve the problem when compiled as winelib, though. Could this be a 
winelib problem??

In short - things are getting weirder.....

             Shachar

-- 
Shachar Shemesh
Lingnu Open Source Consulting ltd.
http://www.lingnu.com/




More information about the wine-devel mailing list