Re: [PATCH 0/2] SIGWINCH problem with terminal apps still alive
From: Adam TlaÅka
Date: Sun Oct 12 2008 - 15:02:16 EST
Sun, 12 Oct 2008 19:03:12 +0100 - Alan Cox <alan@xxxxxxxxxxxxxxxxxxx>:
> 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@xxxxxxxxx ^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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/