Traditional (older) Unix OSes suffered from an issue regarding the handling of signals while processing blocking system calls.
Blocking APIs
An API is said to be blocking when, on issuing the API, the calling process (or thread) is put into a sleep state. Why is this? This is because the underlying OS or device driver understands that the event that the caller needs to wait upon has not yet occurred; thus, it must wait for it. Once the event (or condition) arises, the OS or driver wakes up the process; the process now continues to execute its code path.
Examples of blocking APIs are common: read, write, select, wait (and its variants), accept, and so on.
Take a moment to visualize ...