diff options
author | Takashi Yano <takashi.yano@nifty.ne.jp> | 2020-02-18 12:12:54 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2020-02-18 13:35:42 +0300 |
commit | 81b34409985ce31415a1d994ef744e72cfb8c378 (patch) | |
tree | b60875a074dd32a6407663832043369cc23c6fa0 /winsup/cygwin/select.cc | |
parent | 321d79abd3240008ae09e3021b312126058d9416 (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.cc | 22 |
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; |