Mark H Weaver skribis: > ====================================================================== > ERROR: test_fork (test.test_pty.PtyTest) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/tmp/nix-build-python-3.3.3.drv-13/Python-3.3.3/Lib/test/test_pty.py", line 116, in test_fork > pid, master_fd = pty.fork() > File "/tmp/nix-build-python-3.3.3.drv-13/Python-3.3.3/Lib/pty.py", line 107, in fork > master_fd, slave_fd = openpty() > File "/tmp/nix-build-python-3.3.3.drv-13/Python-3.3.3/Lib/pty.py", line 29, in openpty > master_fd, slave_name = _open_terminal() > File "/tmp/nix-build-python-3.3.3.drv-13/Python-3.3.3/Lib/pty.py", line 70, in _open_terminal > raise os.error('out of pty devices') > OSError: out of pty devices This particular test is fixed by the daemon patch I posted, which makes sure /dev/pts/ptmx is 0666 (I’ll update nix-upstream.) Now I see one remaining failure: --8<---------------cut here---------------start------------->8--- [374/374/1] test_multiprocessing /tmp/nix-build-python-3.3.3.drv-1/Python-3.3.3/Lib/multiprocessing/process.py:95: ResourceWarning: unclosed self._target(*self._args, **self._kwargs) Warning -- multiprocessing.process._dangling was modified by test_multiprocessing test test_multiprocessing failed -- Traceback (most recent call last): File "/tmp/nix-build-python-3.3.3.drv-1/Python-3.3.3/Lib/test/test_multiprocessing.py", line 1035, in test_wait_result self.assertRaises(KeyboardInterrupt, c.wait, 10) AssertionError: KeyboardInterrupt not raised by wait --8<---------------cut here---------------end--------------->8--- This test exercises the ‘Condition’ API, which implements an inter-process synchronization primitive similar to condition variables, on top of semaphores (sem_open): --8<---------------cut here---------------start------------->8--- def _test_wait_result(cls, c, pid): with c: c.notify() time.sleep(1) if pid is not None: os.kill(pid, signal.SIGINT) def test_wait_result(self): if isinstance(self, ProcessesMixin) and sys.platform != 'win32': pid = os.getpid() else: pid = None c = self.Condition() with c: self.assertFalse(c.wait(0)) self.assertFalse(c.wait(0.1)) p = self.Process(target=self._test_wait_result, args=(c, pid)) p.start() self.assertTrue(c.wait(10)) if pid is not None: self.assertRaises(KeyboardInterrupt, c.wait, 10) p.join() --8<---------------cut here---------------end--------------->8--- I thought that the test might be racy, so I tried this patch: