** Description changed:

  From https://lkml.org/lkml/2014/10/10/345
- 
  
  #####
  Commit f95499c3030f ("n_tty: Don't wait for buffer work in read() loop")
- introduces a race window where a pty master can be signalled that the 
ptyslave was closed before all the data that the slave wrote is 
delivered.Commit f8747d4a466a ("tty: Fix pty master read() after slave closes") 
fixed theproblem in case of n_tty_read, but the problem still exists for 
n_tty_poll.This can be seen by running 'for ((i=0; i<100;i++));do ./test.py 
;done'where test.py is:
+ introduces a race window where a pty master can be signalled that the 
ptyslave was closed before all the data that the slave wrote is delivered.
+ Commit f8747d4a466a ("tty: Fix pty master read() after slave closes") fixed 
theproblem in case of n_tty_read, but the problem still exists for 
n_tty_poll.This can be seen by running 'for ((i=0; i<100;i++));do ./test.py 
;done'where test.py is:
  
  import os, select, pty
  (pid, pty_fd) = pty.fork()
  
  if pid == 0:
-    os.write(1, 'This string should be received by parent')
+    os.write(1, 'This string should be received by parent')
  else:
-    poller = select.epoll()
-    poller.register( pty_fd, select.EPOLLIN )
-    ready = poller.poll( 1 * 1000 )
-    for fd, events in ready:
-       if not events & select.EPOLLIN:
-          print 'missed POLLIN event'
-       else:
-          print os.read(fd, 100)
-    poller.close()
+    poller = select.epoll()
+    poller.register( pty_fd, select.EPOLLIN )
+    ready = poller.poll( 1 * 1000 )
+    for fd, events in ready:
+       if not events & select.EPOLLIN:
+          print 'missed POLLIN event'
+       else:
+          print os.read(fd, 100)
+    poller.close()
  
  The string from the slave is missed several times.
  This patch takes the same approach as the fix for read and special casesthis 
condition for poll.
  Tested on 3.16.
  #####
  
  This is has been merged to Linus Torvalds branch:
  
https://github.com/torvalds/linux/commit/c4dc304677e8d566572c4738d95c48be150c6606
  
  This would be needed to be implemented in to 3.13 kernel too. As both
  12.04 and 14.04 is currently running the Trusty LTS it affectes both.
  
  br,
  
  Björn

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1397976

Title:
  tty hangup regression in 3.13 kernel (trusty LTS)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux-lts-trusty/+bug/1397976/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to