Loading
Commits on Source 1
-
cznic authored
The first Xabort fix used a process-directed kill(2), which delivers SIGABRT asynchronously; the calling thread could race ahead to the fallback panic and exit(2) before the signal landed — observed as a rare SQLite crash-test failure (writecrash-1.95.1) after ~94 crash iterations had already passed. Deliver SIGABRT synchronously and thread-directed via _lwp_kill(_lwp_self()) (the primitive the Go runtime's raise() uses), after unblocking SIGABRT on the calling thread (__sigprocmask14 SIG_UNBLOCK) so a blocked mask cannot defeat it. The process-directed kill(2) and panic remain as unreachable fallbacks. Validated on NetBSD 10.1/amd64: 20/20 child aborts die by signal SIGABRT, both on the happy path and with SIGABRT pre-blocked on the calling thread. Co-Authored-By:Claude Opus 4.8 <noreply@anthropic.com>