help needed to fix contrib/ee crash/exit when receiving SIGWINCH

Paul B Mahol onemda at gmail.com
Fri Oct 23 11:08:23 UTC 2009


On 10/23/09, Alexander Best <alexbestms at math.uni-muenster.de> wrote:
> Nate Eldredge schrieb am 2009-10-23:
>> On Fri, 23 Oct 2009, Antony Mawer wrote:
>
>> >On Fri, Oct 23, 2009 at 1:35 PM, Alexander Best
>> ><alexbestms at math.uni-muenster.de> wrote:
>> >>hi everyone,
>
>> >>together with hugh mahon (the author of ee) i've been trying to
>> >>fix a nasty
>> >>bug in ee. for some reason ee exits (not crashes) and leaves the
>> >>console
>> >>corrupted when receiving SIGWINCH (`killall -SIGWINCH ee` should
>> >>exit all
>> >>running ee instances).
>
>> >I noticed this the other day when working on a new 8.0-RC1 system...
>> >in my case I was using putty (Windows ssh client) to access the
>> >system
>> >and maximised the window I had ee running in, and noticed ee just
>> >dumped me straight to the prompt.
>
>> Seems a good start might be to compile ncurses with -g, link ee
>> against it, put a breakpoint on the SIGWINCH handler, and start
>> single stepping...
>
>> --
>
>> Nate Eldredge
>> nate at thatsmathematics.com
>
> it seems ncurses registers a standard libc function with SIGWINCH. i started
> gdb, loaded ee and did "handle SIGWINCH stop"
>
> when i do "run" and issue a SIGWINCH to ee this is the output:
>
> Program received signal SIGWINCH, Window size changed.
> 0x281a4063 in read () from /lib/libc.so.7
>
> (gdb) nexti
> 0x281a4048 in write () from /lib/libc.so.7
> (gdb) nexti
> 0x281a4049 in write () from /lib/libc.so.7
> (gdb) nexti
> 0x281a404e in write () from /lib/libc.so.7
> (gdb) nexti
> 0x281a404f in write () from /lib/libc.so.7
> (gdb) nexti
> 0x281a4055 in write () from /lib/libc.so.7
> (gdb) nexti
>
> Program exited normally.
>
> so i guess ee calls some ncurses function right at the beginning. that
> ncurses
> function registers a new function to be called upon SIGWINCH (maybe
> exit(3)).

Hmm, from my little experience with ncurses, there is no such function bind to
SIGWINCH. Even if exit() is called from ncurses that's because ncurses can not
handle current state in any reasonable way so exiting is only possible solution,
but in such case something should be printed and program should not
exit normally.

If you start another shell command from ee, and let it be for example vim, once
you resize xterm window, vim will still work but ee will start to
consume CPU time.


More information about the freebsd-hackers mailing list