> Date: Fri, 07 Jun 2013 17:59:57 +0300 > From: Eli Zaretskii <e...@gnu.org> > Cc: guile-user@gnu.org > > > > What's more, after this backtrace is displayed, guile hangs here: > > > > > > void > > > scm_i_close_signal_pipe() > > > { > > > /* SIGNAL_DELIVERY_THREAD_MUTEX is only locked while the signal > > > delivery > > > thread is being launched. The thread that calls this function is > > > already holding the thread admin mutex, so if the delivery thread > > > hasn't > > > been launched at this point, it never will be before shutdown. */ > > > >>>>> scm_i_pthread_mutex_lock (&signal_delivery_thread_mutex); > > > > > > #if SCM_USE_PTHREAD_THREADS > > > if (scm_i_signal_delivery_thread != NULL) > > > close (signal_pipe[1]); > > > #endif > > > > > > scm_i_pthread_mutex_unlock (&signal_delivery_thread_mutex); > > > } > > > > Can you run ‘thread apply all bt’ in gdb once it’s hang, and send the > > tip of the C backtraces for all the threads? > > I'll try.
There's only one thread at this point, its backtrace is below. Actually, I don't see more than this one thread during the entire run (GDB doesn't announce any thread birth or death, and Process Explorer shows a single thread in the process at all times). Note that we are talking about a child guile process -- it's that one that prints the weird traceback and hangs. The parent just waits for the child to finish. Here's the backtrace with some context info: GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-pc-mingw32". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Attaching to process 5864 [New Thread 5864.0x15cc] [New Thread 5864.0x1dc4] Reading symbols from d:\usr\eli\utils\guile-2.0.9\libguile\.libs\guile.exe...done. (gdb) info threads Id Target Id Frame * 2 Thread 5864.0x1dc4 0x77c4000d in ntdll!DbgBreakPoint () from C:\Windows\SysWOW64\ntdll.dll 1 Thread 5864.0x15cc vm_regular_engine (vm=0xf65c80, program=0xfa0f98, argv=0x0, nargs=0) at vm-i-system.c:779 (gdb) bre break break-range (gdb) break scmsi scmsigs.c scmsigs.x (gdb) break scmsigs.c:662 Breakpoint 1 at 0x43671b: file scmsigs.c, line 662. (gdb) c Continuing. [Thread 5864.0x1dc4 exited with code 0] [Switching to Thread 5864.0x15cc] Breakpoint 1, scm_i_close_signal_pipe () at scmsigs.c:662 662 scm_i_pthread_mutex_lock (&signal_delivery_thread_mutex); (gdb) bt #0 scm_i_close_signal_pipe () at scmsigs.c:662 #1 0x00431ee9 in on_thread_exit (v=0xef0f00) at threads.c:777 #2 0x62481f14 in ptw32_callUserDestroyRoutines () from d:\usr\bin\pthreadGC2.dll #3 0x624855a1 in pthread_win32_thread_detach_np () from d:\usr\bin\pthreadGC2.dll #4 0x62485a45 in DllMain@12 () from d:\usr\bin\pthreadGC2.dll #5 0x624810ed in DllMainCRTStartup@12 () from d:\usr\bin\pthreadGC2.dll #6 0x77c69950 in ntdll!RtlQueryEnvironmentVariable () from C:\Windows\SysWOW64\ntdll.dll #7 0x62480000 in ?? () #8 0x77c7d6b2 in ntdll!LdrShutdownProcess () from C:\Windows\SysWOW64\ntdll.dll #9 0x624810c0 in __dll_exit () from d:\usr\bin\pthreadGC2.dll #10 0x77c7d554 in ntdll!RtlExitUserProcess () from C:\Windows\SysWOW64\ntdll.dll #11 0x75e97a0d in KERNEL32!ExitProcess () from C:\Windows\syswow64\kernel32.dll #12 0x00000000 in ?? () (gdb) info threads Id Target Id Frame * 1 Thread 5864.0x15cc scm_i_close_signal_pipe () at scmsigs.c:662