On Sun, Oct 27, 2019 at 10:07:14PM +0100, Bram Moolenaar wrote:
> Paul Ackersviller wrote:
> > With athena gui version on AIX, vim will consistently go into an
> > infinite loop if the network connection drops. Trussing such a process
> > points to a select system call, so I found this one without any check on
> > the return value. This patch mostly prevents the problem, although
> > not quite 100% of the time.
> >
> > My EINTR check is just what I'm guessing some other OSes might need, it
> > doesn't seem to matter for AIX. In fact the error-handling I'm doing
> > below doesn't seem to matter either, as I can't get it to execute, nor
> > can I stop there in a debugger, but the check seems enough for exiting
> > the process via somewhere in X libraries.
>
> It looks like this code depends on undocumented or system-specific
> behavior. At least for what I could find poll() and select() called
> with no file descriptors will always wait until the timeout and then
> return zero. Do you have documentation about when the error code would
> be returned?
I can pass on man pages if you want to know possible errno values, but
that won't help with EINTR, as no OSes I use have that behaviour. I put
that check in only to mimic how vim is already handling select() errors
elsewhere, i.e. in RealWaitForChar() also in os_unix.c, as well as
can_write_buf_line() in the channel.c file.
> Also, I don't see how a hang can occur here when poll() or select()
> returns without waiting. Vim would simply continue. Or is the delay
> critical in some situation?
Yes, continues infinitely, which is the issue... chewing up 100% of a CPU
until killed. Not sure how you got th idea of a hang.