help needed to fix contrib/ee crash/exit when receiving SIGWINCH
Eygene Ryabinkin
rea-fbsd at codelabs.ru
Fri Oct 23 15:56:43 UTC 2009
Gentlemen, good day.
Fri, Oct 23, 2009 at 02:02:38PM +0200, Dag-Erling Sm??rgrav wrote:
> src/contrib/ee/ee.c in 8:
>
> in = wgetch(text_win);
> if (in == -1)
> exit(0); /* without this exit ee will go into an
> infinite loop if the network
> session detaches */
>
> >From the wgetch() man page:
>
> Programmers concerned about portability should be prepared for
> either of two cases: (a) signal receipt does not interrupt
> getch; (b) signal receipt interrupts getch and causes it to
> return ERR with errno set to EINTR. Under the ncurses
> implementation, handled signals never inter??? rupt getch.
Hmm, we can transform this code to the following one:
-----
errno = 0;
do {
in = wgetch(text_win);
} while (errno == EINTR);
if (in == -1)
exit(0);
-----
This won't help with FreeBSD's ncurses, but may be other variants
will feel much better with such a event loop variant.
> The real issue, though, is that when a SIGWINCH is caught, wgetch()
> correctly returns KEY_RESIZE, but the next call to wgetch() returns -1.
> The next call after that is fine. I suspect the error lies somewhere
> inside kgetch() in contrib/ncurses/ncurses/base/lib_getch.c.
The problem should be healed with the attached patch. And you're
partly right: this is kgetch() that is returning ERR for the second
wgetch(), but kgetch() shouldn't be blamed for this -- _nc_wgetch()
should. At least in my opinion ;)
Any views on this?
--
Eygene
_ ___ _.--. #
\`.|\..----...-'` `-._.-'_.-'` # Remember that it is hard
/ ' ` , __.--' # to read the on-line manual
)/' _/ \ `-_, / # while single-stepping the kernel.
`-'" `"\_ ,_.-;_.-\_ ', fsc/as #
_.-'_./ {_.' ; / # -- FreeBSD Developers handbook
{_.-``-' {_/ #
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ncurses-properly-handle-SIGWINCH.diff
Type: text/x-diff
Size: 1394 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20091023/3720a4a7/ncurses-properly-handle-SIGWINCH.bin
More information about the freebsd-hackers
mailing list