Hello, ext2fs quite often aborts with
ext2fs.static: thread-cancel.c:55: hurd_thread_cancel: Assertion `! __spin_lock_locked (&ss->critical_section_lock)' failed. Here is the relevant code: error_t hurd_thread_cancel (thread_t thread) { struct hurd_sigstate *ss = _hurd_thread_sigstate (thread); if (! ss) return EINVAL; if (ss == _hurd_self_sigstate ()) { ... return 0; } /* line 55: */ assert (! __spin_lock_locked (&ss->critical_section_lock)); __spin_lock (&ss->critical_section_lock); ... } I.e. here ss is not NULL and not the current thread's sigstate, but the sigstate of another thread. Is the assertion really correct? To my understanding, the other thread could have been preempted by Mach in the middle of a critical section, and in that case the spinlock is indeed not available and the current thread should indeed spin-lock it. Samuel