Hello, As seen in ccb80964cd7cd112e300c34d32f67125a6d6da9a, there’s a lock ordering mismatch between ‘do_thread exit’ and ‘fat_mutex_lock’ wrt. ‘t->admin_mutex’ and ‘m->lock’. I thought this commit solved the problem, but now I think it doesn’t because it leaves a small window during which a mutex could be held by a thread without being part of its `mutexes' list, thereby violating the invariant tested at line 667: /* Since MUTEX is in `t->mutexes', T must be its owner. */ assert (scm_is_eq (m->owner, t->handle)); So I reverted the patch. (The situation isn’t better without the patch since “while ./check-guile srfi-18.test threads.test ; do : ; done” eventually hits the assertion failure.) I tried the attached patch, which is inelegant and leads to deadlocks with canceled threads (namely the “cancel succeeds” test in threads.test.) IOW I would welcome fresh ideas to approach the problem. :-) Thanks, Ludo’.