On Fri, Jun 28, 2024 at 11:36:20AM -0700, Jeremy wrote:
> On 06/28/24 10:52AM, Hiltjo Posthuma wrote:
> > Do you perhaps also have a way to easily reproduce this deadlock condition?
>
> I cannot reproduce the deadlock on my machine. All I want to do is
> simplify ttywrite & I'm trusting that the author of 261ea4b has actually
> seen this problem before.
>
> This is the comment from 261ea4b which I believe implies a deadlock
> when using st over serial:
> ...
> * Remember that we are using a pty, which might be a modem line.
> * Writing too much will clog the line. That's why we are doing this
> * dance.
> * FIXME: Migrate the world to Plan 9.
> ...
I've always interpreted it to mean that, since serial connections have
a constant transfer rate, and the OS buffers a finite number of bytes,
writing too many bytes to a serial device will make write(3) block,
which would make the terminal unresponsive until all the data is
transmitted by the hardware.
After that comment, in ttywriteraw():
/*
* We weren't able to write out everything.
* This means the buffer is getting full
* again. Empty it.
*/
if (n < lim)
lim = ttyread();
That makes sense, since reading N bytes will give the hardware enough
time to write at least N bytes.
I don't really understand why this use case needs to be handled at all.
Wouldn't you use something like minicom for a modem line?
--
Storkman