Hi Maxime, Thank you for your thoughts!
The documentation of libc suggests that the signal handler is run before any system call return EINTR, so I think Guile should have added the handler to the 'pending list' before the call to sleep returns. https://www.gnu.org/software/libc/manual/html_node/Interrupted-Primitives.html Right, I don't think there is a promise of when scm_async_tick is run, which is why I tried to run it manually just in case. It doesn't seem to change anything. As for 3, I tried putting async_ticks everywhere, doesn't seem to change anything. However, this morning, I'm having difficulty reproducing the issue... I guess this is how it is with race conditions. Will update if I find anything new... ~ Vijay