new big in pcomm 1.1
Dan Mercer
mercer at ncrcce.StPaul.NCR.COM
Tue Oct 11 16:02:54 AEST 1988
Sorry Emmet, but I found another bug.
I noticed that sometimes if I hit the delete key when
forked to the shell that when I returned to my remote
session inpute from the remote line wasn't being picked up.
However, if I hit another hot key function, I would then
get a flood of input. I usually hung up the connection
and tried again. I finally remapped (using stty) DEL
so I didn't have the problem. This was under 1.0.
After compiling 1.1, I checked to see if the same problem
existed and it did. I finally had time to hack around
and found the problem, but I still don't have a complete
solution and feel it would be pretty arrogant to offer
one. So here's the problem in a nutshell:
Pcomm forks and exec's pcomm_input. Pcomm_input catches
interrupt using it to determine whether to suspend input.
When the user wants to fork to the shell, pcomm parent
forks and execs. Pcomm child does a signal(SIGINT,SIG_DFL)
while pcomm parent sets up to ignore the delete key.
However, when the user uses the delete key, pcomm_input
catches the interrupt signal and unsuspends input.
When the user leaves the shell, pcomm parent sends
interrupt to pcomm_input to unsuspend input, but actually
suspends input. Of course, the problem is intermittent
because if an even number of deletes are hit, the
input routine is returned to the proper state.
Why is pcomm_input receiving the interrupt from another child
process of its parent? Because the parent, both children
and the original user shell are all members of the same
process group, and /dev/tty is its controlling terminal.
Hacking around, I was able to bypass the problem by
(in terminal.c right after the fork but prior to the exec)
fclose-ing stdin and then calling setpgrp to set
pcomm_input up as the leader of its own process group.
When the port is opened, it then becomes the controlling
terminal.
The problem with this hack (and why I'm more than happy to
leave the fix to you) is that hangup will no longer come
from /dev/tty hanging up, but from the unlikely event
the port line gets hung up.
I submitted it to this group for two reasons:
I am totally at a loss at how to mail anything (anybody
who can mail me any doco on using mail would be greatly
appreciated). I don't even have amn files to help me out
(our usenet box is woefully underpowered). My management
is also not sympathetic to my being on the net (though
they love the free software).
My other reason is the hope that some wizard out there
with a better knowledge of process groups might be able to come
to the rescue.
My congratulations on a great product. Considering it's
size, its capability, and the fun and glory of dealing
with curses(foiled again) its a remarkable achievement.
Its allowed us to cancel a commercial product that had
a much harder user interface and far more bugs, to the
point where it was unusable for our user base (computers,
we don't need no stinking computers).
Oops, one other bug. By opening the port directly, instead
of using the System V dial command, one other problem pops up
during long sessions. Dial sets an alarm to touch the lock
file at 45 minute (I think) intervals. This is because a
uucp cron task will clean up and remove the lock file if
it's more than 1 hour old, largely because uucp and cu
do such a lousy job of cleaning up their mistakes.
And here's one for the net: does anyone know how to
keep curses from insuring that the terminal is not
in input mode on startup? I use an ADDS viewpoint 90
for my primary terminal. Input mode is a toggle - the
same escape sequence turns on and off input mode.
Whenever curses comes up, boom, I'm stuck in input
mode (it's not even constant, since the exit input mode
sequence can come out more than once).
My bypass is to keep separate terminfo entries for
curses and non-curses applications. Any help
Dan Mercer
NCR Comten
More information about the Comp.sources.bugs
mailing list