It is partially my fault because I am blocking the delivery of SIGHUPs to 
processes within a shell -- I'm intercepting SIGHUP in a trap handler in 
bash, so bash can get a chance to do some stuff for me on closing -- and 
it doesn't seem to be resending it on properly to slrn.

This bug will also be biting people who deliberately block the delivery of 
SIGHUPs to children because they don't like the concept of programs dying 
just because their terminal disappears, *if those apps don't need that 
terminal to operate* -- eg, all X apps.  It'd probably be better to fix 
all those apps to just ignore SIGHUP, but that's a lot more work than just 
fixing those apps that don't exit properly when reading an EOF from the 
terminal.

So a way to reproduce this is to just setup a trap in bash:

trap 'trap - HUP; dostuff; kill -HUP $$' HUP
ssh localhost, run slrn
then kill -9 the ssh process.

In slrn.c:1653, there is a suspicious test:

   if ((key == NULL) || (key->type == 0))

If I attach gdb to a looping slrn process, it comes back with key == NULL 
because it's reading an EOF from the terminal.  If key == NULL, it 
returns, and reads another key from the terminal...

Should obviously be checking for EOF there, however, making sure that that 
differs from any CTRL-D keybindings in slang.  Hmmm...

-- 
Tim Connors




-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to