Xref: utzoo comp.mail.misc:1157 comp.unix.questions:8677 Path: utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!ncar!oddjob!mimsy!chris From: chris@mimsy.UUCP (Chris Torek) Newsgroups: comp.mail.misc,comp.unix.questions Subject: Re: strange timing problem in /usr/ucb/Mail Summary: Annoying, everpresent, and *hard* to fix (sorry) Message-ID: <12936@mimsy.UUCP> Date: 10 Aug 88 04:16:49 GMT References: <13@catwoman.ACA.MCC.COM> Organization: U of Maryland, Dept. of Computer Science, Coll. Pk., MD 20742 Lines: 55 In article <13@catwoman.ACA.MCC.COM> ables@catwoman.ACA.MCC.COM (King Ables) writes: >We noticed a strange timing problem in /usr/ucb/Mail ... >I suspect it exists from the original Berkeley code. >The problem occurs [anytime you are editing a header, actually]. >... If the Cc: line has several addresses on it so that it wraps >to a 2nd line AND if you hit ^D and(the in >response to the Cc: line prompt) VERY QUICKLY, there seems >to be a timing problem where the 2nd line's worth of text (the >part that was wrapped) isn't gathered up and processed so you >wind up with a partial CC: line going out. This description is flawed, but the effect is right: if you hit return fast enough, part of the text intended for that line appears on the next line (possibly the command). The same thing happens when using ~h, although for whatever reasons, people tend to be slower to bang on the return key here. The bug has existed ever since the TIOCSTI ioctl was added, and is very simple and very hard to fix. The Mail program uses TIOCSTI (`Tty IO Control, Simulate Terminal Input') to stuff characters into the tty input queue, as if you had typed them yourself. You can then edit them using the kernel tty input code. This is a nice way to implement single-line editing, but it has a serious flaw: TIOCSTI does exactly what it implies. The TIOCSTI ioctl passes a character to the tty input code, where it is treated just as if you typed it just then. Hence if you type *before* Mail gets around to doing a TIOCSTI, what you typed goes in front of what Mail `types'. Moreover, if for some crazy reason you like to use the letter `w' as your line kill character, when Mail tries to push back the Cc line aglew@gould.com you wind up with the string @gould.com since the `w' did a line kill. The best fix for the problem is to replace TIOCSTI with something useful. At least two operations are needed, one to push a string in front of the tty queue, and one to push it after; it would also help if one could automatically quote any special characters. Alternatively, one could remove tty line editing from the kernel entirely, and again replace TIOCSTI with something useful, but outside the kernel. Either way, just changing Mail will not do it. (Another possibility is to make Mail run in cbreak mode, and have it simulate the kernel's tty input editor. There is or was code in Mail to do this. This solution is at least as unsatisfactory as TIOCSTI.) -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@mimsy.umd.edu Path: uunet!mimsy!chris