Haunting a Windows "Subsurface not start but becoming zombie" bug

Thiago Macieira thiago at macieira.org
Sun Apr 9 15:12:40 PDT 2017


Em domingo, 9 de abril de 2017, às 04:09:43 PDT, Stefan Fuchs escreveu:
> Hi All,
> 
> I'm trying to haunt another issue I'm seeing already since a long time
> (months):
> 
> It is that simply sometimes Subsurface under Windows 10 doesn't start. I
> mean I click on the icon and no window and also no crash info appears.
> After that I have a zombie Subsurface.exe running. I now for the first
> time reproduced this with the MXE debug build and again attached drmingw
> to the zombie exe.
> 
> Can s.o. guess s.th. from the output?

Looks like it's a deadlock, caused by the GCC implementation on Windows 
violating a C++11 requirement.

You have three (or more) threads running. The interesting ones are:
 A) an aux thread that is calling PeekMessage, but somehow recurses through a 
hook to __gthr_win32_recursive_mutex_lock
 B) an aux thread that is trying to lock a mutex and is stuck in 
QMutexPrivate::allocate, having called __gthr_win32_recursive_mutex_lock
 C) the main thread, that is stuck in a mutex wait

Guessing at what in QMutexPrivate::allocate could cause a call to 
__gthr_win32_recursive_mutex_lock, I can only come up with the function-local 
static:

FreeList *freelist()
{
    static FreeList list;
    return &list;
}

The C++11 standard says that such initialisation must be thread-safe and must 
not deadlock. Hence why I think that this is a violation of the C++ standard.

In any case, the code above no longer exists. It was changed in Qt 5.7.1. 
Please upgrade.

-- 
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center



More information about the subsurface mailing list