https://bugs.winehq.org/show_bug.cgi?id=49897
Zebediah Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |z.figura12@gmail.com
--- Comment #13 from Zebediah Figura z.figura12@gmail.com --- I encountered hangs on fls_section. https://source.winehq.org/git/wine.git/commitdiff/16592ca918999dd28764e071384361ea44bdf11d should fix that, but even then I still sometimes see way too many mscorsvw processes refusing to exit.
I tried taking a backtrace of one of them via gdb, and I see one (main?) thread with this backtrace:
Thread 1 (Thread 0xf7f10980 (LWP 1793112) "mscorsvw.exe"): #0 0xf7ededc9 in __kernel_vsyscall () #1 0xf7e7ad07 in __lll_lock_wait () from /usr/lib32/libpthread.so.0 #2 0xf7e72ab6 in pthread_mutex_lock () from /usr/lib32/libpthread.so.0 #3 0xf7ef158e in _dl_fini () from /lib/ld-linux.so.2 #4 0xf7c9fca6 in __run_exit_handlers () from /usr/lib32/libc.so.6 #5 0xf7c9fe75 in exit () from /usr/lib32/libc.so.6 #6 0xf7c0ab44 in signal_exit_thread () from /bridge/git/wine32/dlls/ntdll/ntdll.so #7 0xffdacdb8 in ?? () #8 0xf7bfcd67 in __wine_main (argc=12, argv=0xffdacf24, envp=0xffdacf58) at ../wine/dlls/ntdll/unix/loader.c:1574 #9 0x7d001295 in main ()
and 10 other threads with this backtrace:
Thread 2 (Thread 0xda3ac0 (LWP 1793113) "mscorsvw.exe" (Exiting)): #0 0xf7ededc9 in __kernel_vsyscall () #1 0xf7e7ad07 in __lll_lock_wait () from /usr/lib32/libpthread.so.0 #2 0xf7e72ab6 in pthread_mutex_lock () from /usr/lib32/libpthread.so.0 #3 0xf7ef4be3 in _dl_open () from /lib/ld-linux.so.2 #4 0xf7dad5a0 in do_dlopen () from /usr/lib32/libc.so.6 #5 0xf7dae1e1 in _dl_catch_exception () from /usr/lib32/libc.so.6 #6 0xf7dae2b4 in _dl_catch_error () from /usr/lib32/libc.so.6 #7 0xf7dad6aa in dlerror_run () from /usr/lib32/libc.so.6 #8 0xf7dad756 in __libc_dlopen_mode () from /usr/lib32/libc.so.6 #9 0xf7e7c9b4 in pthread_cancel_init () from /usr/lib32/libpthread.so.0 #10 0xf7e7cc0d in _Unwind_ForcedUnwind () from /usr/lib32/libpthread.so.0 #11 0xf7e7aa9e in __pthread_unwind () from /usr/lib32/libpthread.so.0 #12 0xf7e718fa in pthread_exit () from /usr/lib32/libpthread.so.0 #13 0xf7c1a5b6 in pthread_exit_wrapper (status=0) at ../wine/dlls/ntdll/unix/thread.c:97 #14 0xf7c0ab44 in signal_exit_thread () from /bridge/git/wine32/dlls/ntdll/ntdll.so #15 0x00da3338 in ?? () #16 0xf7e70628 in start_thread () from /usr/lib32/libpthread.so.0 #17 0xf7d70c8a in clone () from /usr/lib32/libc.so.6
Which is kind of weird. How are they all blocked on an internal libdl mutex? Maybe one thread got killed while holding it? That sounds a lot like bug 45932. But bug 45932 was a regression due to threads getting killed while holding *wine* mutexes. If threads can get killed while holding libdl mutexes and cause hangs that way, why wasn't it a problem before?
I don't know how to debug this further.