[comp.unix.questions] Tandy 3.2 kernel bug?

daveb@laidbak.UUCP (Dave Burton) (12/24/87)

The following program produces disconcerting output on
a Tandy 6000 with 3.2 Xenix Core, 3.0 Development System:

main()
{
	setpgrp();
	if (fork() == 0)
		printf(" child: pid = %d pgrp = %d\n", getpid(), getpgrp());
	else
		printf("parent: pid = %d pgrp = %d\n", getpid(), getpgrp());
}

Tandy 6000: [cc ...]
parent: pid = 9536 pgrp = 9536
 child: pid = 9537 pgrp = 9537
			  ^^^^----!!!

Sun 3/160, 3.4 SunOS: [/usr/5bin/cc ...]
parent: pid = 1074 pgrp = 1074
 child: pid = 1074 pgrp = 1074

A somewhat more serious bug is illustrated in the following
code:

/* Bach, pg. 211 */
#include <signal.h>
main()
{
	register int i;
	setpgrp();
	for (i = 0; i < 10; i++) {
		if (fork() == 0) {
			if (i & 1) setpgrp();
			printf("pid = %d pgrp = %d\n", getpid(), getpgrp());
			pause();
		}
	}
	kill(0, SIGINT);
}

The Tandy produces a newline and no children!
[cc ...]

The Sun works, sortof. It spits out 7 lines of info
(because no exit()) and leaves only 4 orphans.
[/usr/5bin/cc ...]

A Sequent works properly, giving 10 output lines
and 5 orphans.
[att cc ...]

What gives?
How many other inconsistencies are there in the Xenix kernel?
Do the 3.1 and earlier versions exhibit the same behaviour?
-- 
--------------------"Well, it looked good when I wrote it"---------------------
 Verbal: Dave Burton                        Net: ...!ihnp4!laidbak!daveb
 V-MAIL: (312) 505-9100 x325            USSnail: 1901 N. Naper Blvd.
#include <disclaimer.h>                          Naperville, IL  60540