Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1394779 > unrolled thread
| Started by | Julio Guerra <julio@farjump.io> |
|---|---|
| First post | 2016-05-05 01:10 +0200 |
| Last post | 2016-05-05 01:10 +0200 |
| Articles | 1 — 1 participant |
Back to article view | Back to linux.kernel
[BUG] drivers/tty: read() on a noncanonical blocking tty randomly fails when VMIN > received >= buf Julio Guerra <julio@farjump.io> - 2016-05-05 01:10 +0200
| From | Julio Guerra <julio@farjump.io> |
|---|---|
| Date | 2016-05-05 01:10 +0200 |
| Subject | [BUG] drivers/tty: read() on a noncanonical blocking tty randomly fails when VMIN > received >= buf |
| Message-ID | <rve5A-4JL-15@gated-at.bofh.it> |
Hi, When a tty (here a slave pty) is set in noncanonical input and blocking read modes, a read() randomly blocks when: "VMIN > kernel received >= user buffer size > 0". The standard says that read() should block until VMIN bytes are received [1][2]. Whether this is an implementation defined case not really specified by POSIX or not, it should not behave randomly (otherwise it really should be documented in termios manpage). I isolated it in the following example (with VMIN = 5, received = 4, user buffer = 3): https://gist.github.com/Julio-Guerra/b3fdefab281403073607d81cabcea04a Since it is random, you will need run it several times to observe both cases. When correctly behaving, it should block in the read() for ever (C-c to kill it). When incorrectly behaving, it does not block and reads into the user buffer what is present in the kernel receive buffer (string "any"). Example where it does not block 3 times out of 4: > $ ./a.out > res=3 buf=any > $ ./a.out > res=3 buf=any > $ ./a.out > ^C⏎ Linux version 4.5.1-1-ARCH (builduser@tobias) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Thu Apr 14 19:19:32 CEST 2016 [1] "Canonical and noncanonical mode", man termios [2] http://www.gnu.org/software/libc/manual/html_node/Noncanonical-Input.html -- Julio Guerra
Back to top | Article view | linux.kernel
csiph-web