1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-25 01:02:24 +00:00
putty-source/unix
Simon Tatham 810e21de82 Unix Plink: handle stdout/stderr backlog consistently.
Whenever we successfully send some data to standard output/error,
we're supposed to notify the backend that this has happened, and tell
it how much backlog still remains, by calling backend_unthrottle().

In Unix Plink, the call to backend_unthrottle() was happening on some
but not all calls to try_output(). In particular, it was happening
when we called try_output() as a result of stdout or stderr having
just been reported writable by poll(), but not when we called it from
plink_output() after the backend had just sent us some more data. Of
course that _normally_ works - if you were polling stdout for
writability at all then it's because a previous call had returned
EAGAIN, so that's when you _have_ backlog to dispose of. But it's also
possible, by an accident of timing, that before you get round to doing
that poll, the seat passes you further data and you call try_output()
anyway, and by chance, the blockage has cleared. In that situation,
you end up having cleared your backlog but forgotten to tell the
backend about it - which might mean the backend never unfreezes the
channel or (in 'simple' mode) the entire SSH socket.

A user reported (and I reproduced) that when Plink is compiled on
MacOS, running an interactive session through it and doing
output-intensive activity like scrolling around in htop(1) can quite
easily get it into what turned out to be that stuck state. (I don't
know why MacOS and not any other platform, but since it's a race
condition, that seems like a plausible enough cause of a difference in
timing.)

Also, we were inconsistently computing the backlog size: sometimes it
was the total size of the stdout and stderr bufchains, and sometimes
it was just the size of the one we'd made an effort to empty.

Now the backlog size is consistently stdout+stderr (the same as it is
in Windows Plink), and the call to backend_unthrottle() happens
_inside_ try_output(), so that I don't have to remember it at every
call site.
2022-07-21 18:37:58 +01:00
..
utils Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
agent-client.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
agent-socket.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
askpass.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
cliloop.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
CMakeLists.txt Merge docs and icon fixes from 'pre-0.77'. 2022-05-20 19:35:17 +01:00
columns.c Improve the align_next_to mechanism. 2022-05-05 19:04:34 +01:00
columns.h Improve the align_next_to mechanism. 2022-05-05 19:04:34 +01:00
config-gtk.c Restructure dlgcontrol as a struct with an anon union. 2022-05-01 10:00:32 +01:00
config-unix.c Restructure dlgcontrol as a struct with an anon union. 2022-05-01 10:00:32 +01:00
console.c Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
dialog.c Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
fd-socket.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
gss.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
gtk-common.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
gtkcompat.h gtkcompat.h: fix GTK1 implementation of ref_sink. 2019-11-02 08:26:14 +00:00
gtkmisc.h Convert a lot of 'int' variables to 'bool'. 2018-11-03 13:45:00 +00:00
keygen-noise.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
local-proxy.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
main-gtk-application.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
main-gtk-simple.c Move host CA config box out into its own source file. 2022-05-01 10:16:19 +01:00
network.c Reorganise sk_namelookup (on both platforms). 2022-04-29 12:01:23 +01:00
no-gtk.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
noaskpass.c Better header comment for noaskpass.c. 2022-05-20 19:35:59 +01:00
noise.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
osxlaunch.c osxlaunch: stop setting DYLD_LIBRARY_PATH. 2017-12-20 10:04:02 +00:00
pageant.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
peerinfo.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
platform.h Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
plink.c Unix Plink: handle stdout/stderr backlog consistently. 2022-07-21 18:37:58 +01:00
printing.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
procnet.c Generalise strbuf_catf() into put_fmt(). 2021-11-19 11:32:47 +00:00
psocks.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
psusan.c Merge be_*.c into one ifdef-controlled module. 2021-11-26 17:58:55 +00:00
pterm-config-xpm.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
pterm-xpm.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
pterm.bundle OS X makefile: stop depending on JHBUILD_PREFIX. 2017-11-26 11:45:48 +00:00
pterm.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
pterm.plist Whitespace rationalisation of entire code base. 2019-09-08 20:29:21 +01:00
pty.c Define OMIT_UTMP if there's no utmpx.h. 2022-05-18 18:51:00 +01:00
putty-config-xpm.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
putty-xpm.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
putty.bundle OS X makefile: stop depending on JHBUILD_PREFIX. 2017-11-26 11:45:48 +00:00
putty.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
putty.plist Whitespace rationalisation of entire code base. 2019-09-08 20:29:21 +01:00
serial.c Add memsets after allocation of all Backend implementors. 2021-10-30 17:28:28 +01:00
sftp.c Fix command-line password handling in Restart Session. 2022-05-18 13:05:17 +01:00
sftpserver.c Rename most of the platform source files. 2021-04-26 18:00:01 +01:00
sharing.c Pass an Interactor to new_connection(). 2021-10-30 18:19:56 +01:00
storage.c Certificate trust scope: change to a boolean-expression system. 2022-06-25 14:32:23 +01:00
unicode.c Remove uni_tbl from struct unicode_data. 2022-06-01 09:28:25 +01:00
unifont.c Remove uni_tbl from struct unicode_data. 2022-06-01 09:28:25 +01:00
unifont.h Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
uppity.c Add --allow/deny-auth to Uppity usage message. 2022-01-11 23:57:39 +00:00
uxsel.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
window.c Centralise most details of host-key prompting. 2022-07-07 18:05:32 +01:00
x11.c Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00
x11misc.h Update source file names in comments and docs. 2022-01-22 15:51:31 +00:00