[issue15898] OSX TTY bug

Ronald Oussoren report at bugs.python.org
Sun Jul 14 09:56:29 EDT 2019


Ronald Oussoren <ronaldoussoren at mac.com> added the comment:

This is IMHO not a bug in Python, the problem can been seen when you rewrite the code in msg170261 in C, see the code below.

An observation with the C code below: Both moving ``close(slave)`` to above the sleep or removing that close entirely fixes the problem for me. Likewise with adding ``usleep(700000);`` to the child before exiting.

It is unclear to me who's at fault here, this could be a bug in the macOS kernel but could also be a bug in this code.  It looks like the output is lost when ``close(slave)`` happens after the child proces has exited.

BTW. All testing was done on macOS 10.14.5, with python 3.8.

Anyway: I propose closing this issue because this is not a bug in CPython.


/* The C code used to test system behaviour */
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <util.h>



int main(void)
{
	int master, slave;
	int r;
	pid_t pid;

	r = openpty(&master, &slave, NULL, NULL, NULL);
	if (r == -1) {
		perror("openpty");
		exit(1);
	}

	pid = fork();

	if (pid == 0) {
		/* child */
		setsid();
		close(master);

		dup2(slave, 0);
		dup2(slave, 1);
		dup2(slave, 2);
		close(slave);

    		write(1, "testing", 7);
		_exit(255);
	} else {
		/* parent */
		char buf[1024];

		usleep(500000); /* 0.5 */
		close(slave);

		r = read(master, buf, 1024);
		if (r == -1) {
			perror("read");
			exit(1);
		}

		printf("%d\n", r);
		write(1, buf, r);

		kill(pid, SIGKILL);
	}
}

----------
resolution:  -> not a bug
status: open -> pending
versions: +Python 3.7, Python 3.8, Python 3.9 -Python 2.6, Python 3.1, Python 3.2

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue15898>
_______________________________________


More information about the Python-bugs-list mailing list