Messages in this thread | | | Date | Sun, 12 Oct 2008 21:01:40 +0200 | From | Adam Tlałka <> | Subject | Re: [PATCH 0/2] SIGWINCH problem with terminal apps still alive |
| |
Sun, 12 Oct 2008 19:03:12 +0100 - Alan Cox <alan@lxorguk.ukuu.org.uk>: > Then we end up with both using real_tty. > > > Anyway I think that you miss the point. Why using > > real_tty->termios_mutex instead of tty->termios_mutex in > > tty_do_resize > > To avoid deadlocks if you took both as you updated both structures.
Actually to avoid race and not valid winsize reading because ioctl(TIOCGWINSZ) is done with tty == real_tty so we have to use this mutex and not the other one. What is more because we are using real_tty we could safely use only real_tty->winsize and forget about master tty->winsize.
> > So it seems that tty->termios_mutex could point to different > > location in different calls but real_tty->termios_mutex always > > points to the same location. > > You've finally got there - we always work off real_tty. That is why we > can safely use the mutex on the real_tty side.
typically ioctl(,TIOCSWINSZ,) is called on master side but ioctl(,TIOCGWINSZ,) is called on slave side so tty is not the same in both calls inside ioctl() in tty_io.c. Only real_tty variable has the same value for the same master/slave pair. So we must use real_tty mutex all the time because we not always work from the same side IMHO.
That is why I propose usage of real_tty in ioctl() handling:
case TIOCGWINSZ: return tiocgwinsz(real_tty, p);
Regards
-- Adam Tlałka mailto:atlka@pg.gda.pl ^v^ ^v^ ^v^ System & Network Administration Group - - - ~~~~~~ Computer Center, Gdańsk University of Technology, Poland -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |