> The current thread termination model is deliberately based on the Posix thread cancellation model; by nominating specific points in the thread's workflow where cancellation is possible, you avoid having to deal with asynchronous termination at arbitrary points (as well as having to pay the stack allocation penalty required to handle a signal AST).

In my experience what's usually more important are the places where termination can *not* be done. Those places can be protected easy enough by blocking signals (sigprogmask). Alternatively if you really do want the reverse (only handling signals at specific points) you can block all signals and use `sigtimedwait(2)` or `sigwaitinfo(2)` to wait for signals to arrive.

The used stack size will be negligeable compared to the registers saved for the task switch out of the process, i.e. just a single function call (and whatever the handler itself does).