This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author mlorenzen
Recipients
Date 2006-03-07.12:32:03
SpamBayes Score
Marked as misclassified
Message-id
In-reply-to
Content
Logged In: YES 
user_id=1469902

I have the same problem with Python 2.4.2 running on AIX 5.2.

The test test_pty hangs for 10 seconds after which it is
aborted by a time-out condition. I have traced the system
calls and it turns out that the following scenario occurs:

1) os.write(slave_fd, TEST_STRING_2[:5])
2) os.write(slave_fd, TEST_STRING_2[5:])
3) s2 = os.read(master_fd, 1024)
[...]
4) os.close(slave_fd)

At 3) we only read the first part of the string written in
1) and not the complete string written in both 1) and 2).
The close() call then hangs in 4) (as it is waiting for
slave_fd to be flushed?).

The solution is to continue reading until a newline
character is read ie. readling a complete line. The patch is
shown below.

*** Lib/test/test_pty.py.orig   2004-02-12 7:35:11.000000000
+0000
--- Lib/test/test_pty.py        2006-03-07 2:05:39.000000000
+0000
***************
*** 40,47 ****
      debug("Writing chunked output")
      os.write(slave_fd, TEST_STRING_2[:5])
      os.write(slave_fd, TEST_STRING_2[5:])
!     s2 = os.read(master_fd, 1024)
!     sys.stdout.write(s2.replace("\r\n", "\n"))
  
      os.close(slave_fd)
      os.close(master_fd)
--- 40,49 ----
      debug("Writing chunked output")
      os.write(slave_fd, TEST_STRING_2[:5])
      os.write(slave_fd, TEST_STRING_2[5:])
!     s2 = "";
!     while not s2 or s2[-1] != "\n":
!         s2 = s2 + os.read(master_fd, 1024)
!     sys.stdout.write(s2.replace("\r\n", "\n"));
  
      os.close(slave_fd)
      os.close(master_fd)
History
Date User Action Args
2007-08-23 14:12:15adminlinkissue713169 messages
2007-08-23 14:12:15admincreate