[Python-Dev] stabilizing builds
Thomas Wouters
thomas at xs4all.net
Wed Jan 25 01:59:18 CET 2006
On Tue, Jan 24, 2006 at 11:52:52PM +0100, "Martin v. Löwis" wrote:
> > It looks like a timing issue; the first run succeeds, all subsequent runs
> > fail, for a while, anyway. I'll do some googling and browsing other
> > tty/pty-using code to see if there's anything we're not doing we should be
> > doing, but it looks like a platform bug that we can't fix... Not without
> > re-implementing os.isatty anyway ;P
> Couldn't there be a bug in openpty instead? Perhaps it is trying to
> allocate the same device again, but fails to do so correctly, and fails
> to recognize that it should use a different one instead.
Well, a bug in openpty is what I started with. Python's posix.openpty() that
is, as Solaris doesn't have openpty. Openpty is emulated using code taken
almost verbatim from Solaris' pts(7D) manpage:
fdm = open("/dev/ptmx", O_RDWR); /* open master */
grantpt(fdm); /* change permission of slave */
unlockpt(fdm); /* unlock slave */
slavename = ptsname(fdm); /* get name of slave */
fds = open(slavename, O_RDWR); /* open slave */
ioctl(fds, I_PUSH, "ptem"); /* push ptem */
ioctl(fds, I_PUSH, "ldterm"); /* push ldterm*/
(That's the manpage code.) This is also what openssh does (as far as I can
tell). Screen does it slightly differently; it does the ptsname() call
before the grantpt/unlockpt calls, but the open(slavename) after. If I make
posixmodule do that, it still fails on Solaris. Mucking with it more just
breaks it more.
The thing is, disabling the check that fails, whether the slave-tty returned
by os.openpty() is a tty, shows that the later test for the same thing
succeeds. The later test is done in a child created by pty.fork(). Disabling
the ptmx code on Solaris is probably the most reliable way to fix the
failing test; the pty module will fall back to old-style BSD pty code and
that works fine. But it's a bit of a shame not to use /dev/ptmx just because
the slave fd, when used directly (rather than in a child process) sometimes
doesn't seem to be a tty. They're still connected, it still seems to work
fine.
> Anyway, if you still think you need an OS 10 account, please let me
> know, and I can give you an account to the machine the buildbot
> runs on.
I think I've seen enough confusing situations for a while... I'm sure the
bug is the same on Solaris 10 ;P
--
Thomas Wouters <thomas at xs4all.net>
Hi! I'm a .signature virus! copy me into your .signature file to help me spread!
More information about the Python-Dev
mailing list