lkml.org 
[lkml]   [2009]   [Jun]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Subjectpty tcdrain() bug in 2.6.27 to 2.6.30/current
Date
tcdrain blocks on ptys since 2.6.27; at least 2.6.26 returns in a timely 
manner. The following test case reproduces the bug, and hangs only on affected
kernels. Examination of 2.6.26 and 2.6.27 suggests the ioctl used by tcdrain
underwent a rewrite for 2.6.27, and thus fixing this bug is beyond my
capabilities at this time.

-------

#define _POSIX_C_SOURCE 200112L
#define _XOPEN_SOURCE

#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int
main() {
int masterfd, slavefd;
char test[] = "test";

masterfd = posix_openpt(O_RDWR | O_NOCTTY);
assert(masterfd != -1);
grantpt(masterfd);
unlockpt(masterfd);

slavefd = open(ptsname(masterfd), O_NOCTTY | O_RDWR);
assert(slavefd != -1);

assert(sizeof(test) == write(slavefd, test, sizeof(test)));
assert(!tcdrain(slavefd));
}



\
 
 \ /
  Last update: 2009-06-10 06:43    [W:0.129 / U:0.140 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site