[PATCH v2] Cygwin: console: Add guard for set/unset xterm compatible mode.

Corinna Vinschen corinna-cygwin@cygwin.com
Tue Feb 18 12:01:00 GMT 2020


On Feb 18 20:34, Takashi Yano wrote:
> On Tue, 18 Feb 2020 11:43:36 +0100
> Corinna Vinschen wrote:
> > On Feb 18 18:12, Takashi Yano wrote:
> > > - Setting / unsetting xterm compatible mode may cause race issue
> > >   between multiple processes. This patch adds guard for that.
> > > ---
> > >  winsup/cygwin/fhandler.h          |   6 ++
> > >  winsup/cygwin/fhandler_console.cc | 125 +++++++++++++++++++++---------
> > >  winsup/cygwin/select.cc           |  22 ++----
> > >  winsup/cygwin/spawn.cc            |   8 +-
> > >  4 files changed, 103 insertions(+), 58 deletions(-)
> > 
> > The patch looks good to me, but I'm curious...
> > 
> > Yesterday you wrote that interlocked counting is not a good
> > solution due to the 'bash -> cmd -> bash' scenario.  What has
> > changed your mind?
> 
> Interlocking in this patch is not used in open/close, but
> in read()/select() for input, and in write()/close()/exec()
> for output. For input, InterlockedIncrement/Decrement() is
> used and InterlockedExchage() is used for output.
> 
> As for bash->cmd->bash case, first xterm mode is enabled
> for output and input in write() and read() in bash, then
> xterm mode for input is disabled when it returns from read().
> When cmd.exe is executed, xterm mode for output is disabled
> in exec(). As a result, cmd.exe is executed under xterm mode
> disabled. Next, when bash is executed, xterm mode is re-
> enabled in write()/read().
> 
> After that, if second bash is exited, xterm mode for input
> is disabled when returned from read(), and for output, it
> is disabled in close(). Then, cmd.exe is executed under
> xterm mode is disabled. If cmd.exe is exited, xterm mode
> is re-enabled in write()/read() in bash.
> 
> After all, xterm mode for input is enabled/disabled each
> read() and select() call. xterm mode for output is enabled
> when write() is called and disabled in close() and exec()
> for non-cygwin process.
> 
> On Mon, 17 Feb 2020 10:00:15 +0100
> Corinna Vinschen wrote:
> > In terms of this patch, rather than to change the mode on every
> > invocation of read/write/select/close, wouldn't it make more sense to
> > count the number of mode switches in a shared per-console variable, i.e.
> 
> In other words, it is not as suggested above.

Thanks for the explanation.  Pushed.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20200218/78329c0f/attachment.sig>


More information about the Cygwin-patches mailing list