Some comments about init_subshell()
Pavel Roskin
proski at gnu.org
Thu May 17 00:04:38 UTC 2001
Hello!
GCC emits a warning about pty_slave variable possible used uninitialized
in init_subshell(). I was trying to fix it and found what appears to be a
real bug.
Actually, pty_slave is used in two processes. If init_subshell() is called
the first time (yes, it can be called more than once, see below) then
pty_slave is assigned a value in the parent process. Then fork() is
called. Then the child changes the value of pty_slave and does something
with is while the parent calls close(pty_slave).
Since the processes have separate data, the child's pty_slave is a
separate variable. In fact, the child initialization can and should be
made a separate function.
But init_subshell() can be called more than once. If the subshell dies,
then mc is supposed to restart it. In this case, some parts of the
initialization process are skipped and pty_slave is not assigned a certain
value.
After that close(pty_slave) becomes russian roulette. It closes a random
file descriptor. This should be fixed, but there is one problem. I cannot
get subshell recovery to work at all.
Pressing Ctrl-O after killing the subshell with -KILL causes
init_subshell() to be rerun. Dependent on random factors (I think it's a
race between read() in feed_subshell() and sigchld_handler() unsetting
subshell_alive), mc would either decide that the subshell has died
instantly and disable it, or it would exit with the message
subshell.c: read (subshell_pty...): Input/output error
I'm going to fix what I can, but please note that subshell recovery was
broken before me. Any help would be appreciated.
bash-2.04, RedHat 7.0, Linux-2.4.4-ac9, using unix-98 ptys on devfs
(devpts not mounted).
--
Regards,
Pavel Roskin
More information about the mc-devel
mailing list