Subject: Re: O_ASYNC on ttys
To: None <tech-kern@netbsd.org>
From: der Mouse <mouse@Rodents.Montreal.QC.CA>
List: tech-kern
Date: 07/07/2001 20:29:40
>>> I'm fairly certain that this change would break the POSIX
>>> conformance of our tcsetpgrp(3).
> Sorry, by "this change" I meant der Mouse's suggested change to
> TIOCSPGRP.
POSIX mandates that it must fail if the tty in question is not the
controlling tty of the calling process's session? Then I submit -
because of exactly what I want to do here - that POSIX is broken and
should be ignored.
> After reading the thread in the archives, I'm not sure any of it is
> necessary. O_ASYNC cares about the process group or PID indicated by
> an earlier call to fcntl(fd, F_SETOWN, pid) call, not the process
> group of a controlling tty. So der Mouse should be able to get the
> SIGIO signals he wants without any kernel changes.
I suggest you try it - or at least read the code - before saying such
things. If you read the implementation of F_SETOWN, you'll see that it
turns into a TIOCSPGRP call (except for sockets, for which it just
bashes so_pgid - there may be a third alternative now for new-pipes; I
haven't looked).
Or, if you *have* tried it, feel free to say so, but please also say
with what OS rev you tried it. It doesn't work for me, and the code
makes it clear why.
> Below is an example using pipes.
Yes, with pipes it's easy. Pipes are outside the whole controlling-tty
model. Try it with ttys. SIGIO is generated in ttwakeup() and is sent
to tp->t_pgrp. The only place t_pgrp is set to a non-nil value are in
the code for TIOCSCTTY and TIOCSPGRP.
At least as far as I can tell, and the behavior I saw when I first
tried it bears me out.
/~\ The ASCII der Mouse
\ / Ribbon Campaign
X Against HTML mouse@rodents.montreal.qc.ca
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B