On Sat, Jan 05, 2008 at 02:09:32AM +0000, Alan Cox wrote:
> > first segment reverted -> works OK
> > first segment applied -> breaks
> 
> So I would guess while data is being transferred your code sets the tty
> settings to the exact ones that were still in use, and this now drops
> bytes ?

Yes - as far as I can see, only VMIN and VTIME change between ioctl()s.

I made two strace logs:
* strace-OK with patch segment 1 backed out
* strace-broken with patch segment 1 applied

They are trimmed at the beginning and end, and select() calls were
removed.

I'll attach a diff between the two logs, with lots of context.
Please let me know if you need anything further.

Mirko
--- strace-OK   2008-01-06 00:26:29.000000000 +0100
+++ strace-broken       2008-01-06 00:26:44.000000000 +0100
@@ -1,55 +1,54 @@
 open("/dev/ttyUSB0", O_RDWR|O_NOCTTY)   = 3
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0x1cb2, c_lflags=0, c_line=0, c_cc[VMIN]=1, c_cc[VTIME]=255, 
c_cc="\x03\x1c\x7f\x15\x04\xff\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0x1cb2, c_lflags=0, c_line=0, c_cc[VMIN]=1, c_cc[VTIME]=255, 
c_cc="\x03\x1c\x7f\x15\x04\xff\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0x1cb2, c_lflags=0, c_line=0, c_cc[VMIN]=1, c_cc[VTIME]=255, 
c_cc="\x03\x1c\x7f\x15\x04\xff\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_STOP or TCSETSW, {c_iflags=0, c_oflags=0, c_cflags=0xcbc, 
c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, 
c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0xcbc, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, 
c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0xcbc, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, 
c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0xcbc, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, 
c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_STOP or TCSETSW, {c_iflags=0, c_oflags=0, c_cflags=0x1cb2, 
c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, 
c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0x1cb2, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, 
c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 write(3, "\240\242\0\3\273\0\0\0\273\260\263", 11) = 11
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0x1cb2, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, 
c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_START or TCSETS, {c_iflags=0, c_oflags=0, c_cflags=0x1cb2, 
c_lflags=0, c_line=0, c_cc[VMIN]=1, c_cc[VTIME]=255, 
c_cc="\x03\x1c\x7f\x15\x04\xff\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0, 
c_cflags=0x1cb2, c_lflags=0, c_line=0, c_cc[VMIN]=1, c_cc[VTIME]=255, 
c_cc="\x03\x1c\x7f\x15\x04\xff\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
 = 0
 read(3, "\240", 1)                      = 1
 read(3, "\242", 1)                      = 1
 read(3, "\6", 1)                        = 1
 read(3, "\312", 1)                      = 1
 read(3, "\273", 1)                      = 1
 read(3, "\0", 1)                        = 1
 read(3, "\220", 1)                      = 1
 read(3, "\0", 1)                        = 1
 read(3, "\220", 1)                      = 1
 read(3, "\0", 1)                        = 1
 read(3, "\2", 1)                        = 1
 read(3, "{", 1)                         = 1
 read(3, "\253", 1)                      = 1
 read(3, "\0", 1)                        = 1
 read(3, "\4", 1)                        = 1
 read(3, "\277", 1)                      = 1
 read(3, "\247", 1)                      = 1
 read(3, "\0", 1)                        = 1
 read(3, "\0", 1)                        = 1
 read(3, "\0", 1)                        = 1
 read(3, "\0", 1)                        = 1
 read(3, "\0", 1)                        = 1
 read(3, "\2", 1)                        = 1
 read(3, "~", 1)                         = 1
 read(3, "Z", 1)                         = 1
 read(3, "\0", 1)                        = 1
 read(3, "\4", 1)                        = 1
 read(3, "\277", 1)                      = 1
 read(3, "\247", 1)                      = 1
 read(3, "\0", 1)                        = 1
 read(3, "\0", 1)                        = 1
 read(3, "\0", 1)                        = 1
 read(3, "\1", 1)                        = 1
 read(3, "\0", 1)                        = 1
 read(3, "\2", 1)                        = 1
 read(3, "~", 1)                         = 1
-read(3, "\302", 1)                      = 1
-read(3, "\0", 1)                        = 1
+read(3, "\36", 1)                       = 1
 read(3, "\4", 1)                        = 1
 read(3, "\277", 1)                      = 1
 read(3, "\247", 1)                      = 1

Reply via email to