Hello, Andy Wingo skribis: > On Thu 05 Jul 2018 05:33, Mark H Weaver writes: [...] >> Another possibility: both the finalization thread and the signal >> delivery thread call 'scm_without_guile', which calls 'GC_do_blocking', >> which also temporarily grabs the GC allocation lock before calling the >> specified function. See 'GC_do_blocking_inner' in pthread_support.c in >> libgc. You spawn the signal delivery thread by calling 'sigaction' and >> you make work for it to do every second when the SIGALRM is delivered. > > The signal thread is a possibility though in that case you'd get a > warning; the signal-handling thread appears in scm_all_threads. Do you > see a warning? If you do, that is a problem :) I don’t see a warning. But as a Guile user, I shouldn’t see a warning just because there’s a signal thread anyway; it’s not a thread I spawned myself. The weird thing is that the signal thread always exists, and it’s surprising IMO that it shows up in ‘scm_all_threads’ because it’s not a “user thread”. The other surprise is that the warning isn’t triggered: --8<---------------cut here---------------start------------->8--- $ guile GNU Guile 2.2.4 Copyright (C) 1995-2017 Free Software Foundation, Inc. Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. This program is free software, and you are welcome to redistribute it under certain conditions; type `,show c' for details. Enter `,help' for help. scheme@(guile-user)> (all-threads) $1 = (# #) scheme@(guile-user)> (when (zero? (primitive-fork)) (primitive-_exit 0)) ;; no warning --8<---------------cut here---------------end--------------->8--- Ludo’, surprised. :-)