Fabienne Ducroquet <fabiduc@gmail.com> writes: > I've found that the function free_itrm is called later and it unsets > these modes. free_itrm should be called only if an error or EOF occurs in terminal handling, or when ELinks is exiting. > It is called by select_loop line 305 while i = 7 and n = 1. I suppose you mean this part: if (FD_ISSET(i, &x_error)) { if (threads[i].error_func) { threads[i].error_func(threads[i].data); check_bottom_halves(); } k = 1; } Looking at pty_io_select in hurd-20040508/term/ptyio.c, I see that it sets avail |= SELECT_URG whenever the caller is interested in that and control_byte is nonzero. So, it appears that ELinks interprets the presence of the tty in x_error as an indication that an actual error has occurred, whereas the Hurd would like to report benign TIOCPKT (packet_mode) or TIOCUCNTL (user_ioctl_mode) related events that way. Could pty_io_select perhaps be changed to report SELECT_URG only if one of those modes is actually active? Alternatively, ELinks could be changed to ignore exceptional conditions that the select function returns for tty devices. Specifically, all the uses of (select_handler_T) free_itrm as the fourth argument of set_handlers would be changed to NULL. However, I don't know the origin of that code, so I am wary of changing it; it might be needed on some (perhaps non-POSIX) OS. A Hurd-specific #ifdef would be doable though.
Attachment:
pgpbHriznkANX.pgp
Description: PGP signature