The solution arrived at by POSIX is the codice_6 call, which is similar to codice_2 but takes an additional codice_8 parameter, which describes a "signal mask". This allows an application to mask signals in the main task, then remove the mask for the duration of the codice_2 call such that signal handlers are only called while the application is I/O bound. However, implementations of codice_6 have not always been reliable; versions of Linux prior to 2.6.16 do not have a codice_6 system call, forcing glibc to emulate it via a method prone to the very same race condition codice_6 is intended to avoid.