aio_suspend is required by POSIX to be async-signal-safe, but the first non-trivial line of glibc's implementation of aio_suspend is: pthread_mutex_lock(&__aio_requests_mutex); This will obviously deadlock (or worse) if the thread running the signal handler was already executing aio_suspend when it was interrupted by the signal.