summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_console.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler_console.cc')
-rw-r--r--winsup/cygwin/fhandler_console.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
index 3fb91252c..34c1c0da9 100644
--- a/winsup/cygwin/fhandler_console.cc
+++ b/winsup/cygwin/fhandler_console.cc
@@ -89,6 +89,8 @@ static console_state NO_COPY *shared_console_info;
dev_console NO_COPY *fhandler_console::dev_state;
+int NO_COPY fhandler_console::open_fhs;
+
/* Allocate and initialize the shared record for the current console.
Returns a pointer to shared_console_info. */
tty_min *
@@ -630,6 +632,8 @@ fhandler_console::open (path_conv *, int flags, mode_t)
TTYCLEARF (RSTCONS);
set_open_status ();
+ open_fhs++;
+ debug_printf ("incremented open_fhs, now %d", open_fhs);
debug_printf ("opened conin$ %p, conout$ %p",
get_io_handle (), get_output_handle ());
@@ -643,6 +647,9 @@ fhandler_console::close (void)
CloseHandle (get_output_handle ());
set_io_handle (NULL);
set_output_handle (NULL);
+ if (--open_fhs <= 0 && myself->ctty != FH_CONSOLE)
+ FreeConsole ();
+ debug_printf ("decremented open_fhs, now %d", open_fhs);
return 0;
}