Messages in this thread | | | From | Linus Torvalds <> | Date | Fri, 7 Jul 2023 17:21:54 -0700 | Subject | Re: Pending splice(file -> FIFO) excludes all other FIFO operations forever (was: ... always blocks read(FIFO), regardless of O_NONBLOCK on read side?) |
| |
On Fri, 7 Jul 2023 at 17:07, Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > That is, do we want SIGWINCH or SIGALRM to result in a short read? > > Now, that's a different issue, and is actually handled by the signal > layer: a signal that is ignored (where "ignored" includes the case of > "default handler") will be dropped early, exactly because we don't > want to interrupt things like tty or pipe reads when you resize the > window.
In case you care, it's prepare_signal() -> sig_ignored() -> sig_task_ignored() -> sig_handler_ignored() logic that does this short-circuiting.
And while I don't think it's required by POSIX, this was definitely a case where lots of programs that *don't* use any signal handlers at all are very much not expecting to see -EINTR as a return value, and used to break exactly on things like SIGWINCH when reading from a tty or a pipe.
But that logic goes back to before linux-1.0.
In fact, I think it goes back to at least 0.99.10 (June '93).
Linus
| |