Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Yano <takashi.yano@nifty.ne.jp>2020-02-18 12:12:54 +0300
committerCorinna Vinschen <corinna@vinschen.de>2020-02-18 13:35:42 +0300
commit81b34409985ce31415a1d994ef744e72cfb8c378 (patch)
treeb60875a074dd32a6407663832043369cc23c6fa0 /winsup/cygwin/select.cc
parent321d79abd3240008ae09e3021b312126058d9416 (diff)
Cygwin: console: Add guard for set/unset xterm compatible mode.cygwin-3_1_4-release
- Setting / unsetting xterm compatible mode may cause race issue between multiple processes. This patch adds guard for that.
Diffstat (limited to 'winsup/cygwin/select.cc')
-rw-r--r--winsup/cygwin/select.cc22
1 files changed, 7 insertions, 15 deletions
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index f3e3e4482..48a700132 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -1075,17 +1075,16 @@ verify_console (select_record *me, fd_set *rfds, fd_set *wfds,
return peek_console (me, true);
}
+static void console_cleanup (select_record *, select_stuff *);
+
static int
console_startup (select_record *me, select_stuff *stuff)
{
- select_record *s = stuff->start.next;
+ fhandler_console *fh = (fhandler_console *) me->fh;
if (wincap.has_con_24bit_colors ())
{
- DWORD dwMode;
- GetConsoleMode (s->h, &dwMode);
- /* Enable xterm compatible mode in input */
- dwMode |= ENABLE_VIRTUAL_TERMINAL_INPUT;
- SetConsoleMode (s->h, dwMode);
+ fh->request_xterm_mode_input (true);
+ me->cleanup = console_cleanup;
}
return 1;
}
@@ -1093,15 +1092,9 @@ console_startup (select_record *me, select_stuff *stuff)
static void
console_cleanup (select_record *me, select_stuff *stuff)
{
- select_record *s = stuff->start.next;
+ fhandler_console *fh = (fhandler_console *) me->fh;
if (wincap.has_con_24bit_colors ())
- {
- DWORD dwMode;
- GetConsoleMode (s->h, &dwMode);
- /* Disable xterm compatible mode in input */
- dwMode &= ~ENABLE_VIRTUAL_TERMINAL_INPUT;
- SetConsoleMode (s->h, dwMode);
- }
+ fh->request_xterm_mode_input (false);
}
select_record *
@@ -1117,7 +1110,6 @@ fhandler_console::select_read (select_stuff *ss)
s->peek = peek_console;
s->h = get_handle ();
- s->cleanup = console_cleanup;
s->read_selected = true;
s->read_ready = input_ready || get_cons_readahead_valid ();
return s;