cp_to = GetConsoleCP ();
FreeConsole ();
AttachConsole (resume_pid);
+ init_console_handler (true);
release_attach_mutex ();
}
else
this behaviour, protection based on attach_mutex does
not take effect. */
get_ttyp ()->need_invisible_console = true;
+ else if (_major (myself->ctty) != DEV_CONS_MAJOR
+ && (!get_ttyp ()->invisible_console_pid
+ || !pinfo (get_ttyp ()->invisible_console_pid)))
+ /* Create a new invisible console for each pty to isolate
+ CTRL_C_EVENTs between ptys. */
+ get_ttyp ()->need_invisible_console = true;
else
fhandler_console::need_invisible ();
fhandler_pty_common::close ();
if (!ForceCloseHandle (output_mutex))
termios_printf ("CloseHandle (output_mutex<%p>), %E", output_mutex);
+ get_ttyp ()->invisible_console_pid = 0;
return 0;
}
0, TRUE, DUPLICATE_SAME_ACCESS);
FreeConsole ();
AttachConsole (get_ttyp ()->pcon_pid);
+ init_console_handler (true);
WaitForSingleObject (input_mutex, mutex_timeout);
transfer_input (tty::to_cyg, h_pcon_in, get_ttyp (),
input_available_event);
ReleaseMutex (input_mutex);
FreeConsole ();
AttachConsole (resume_pid);
+ init_console_handler (true);
CloseHandle (h_pcon_in);
}
CloseHandle (pcon_owner);
cp_from = GetConsoleOutputCP ();
FreeConsole ();
AttachConsole (resume_pid);
+ init_console_handler (true);
release_attach_mutex ();
}
else
CloseHandle (pcon_owner);
FreeConsole ();
AttachConsole (get_ttyp ()->pcon_pid);
+ init_console_handler (true);
goto skip_create;
}
/* Attach to pseudo console */
FreeConsole ();
AttachConsole (pi.dwProcessId);
+ init_console_handler (true);
/* Terminate helper process */
SetEvent (goodbye);
}
else
AttachConsole (ATTACH_PARENT_PROCESS);
+ init_console_handler (true);
}
else
{ /* Close pseudo console */
}
else
AttachConsole (ATTACH_PARENT_PROCESS);
+ init_console_handler (true);
/* Reconstruct pseudo console handler container here for close */
HPCON_INTERNAL *hp =
(HPCON_INTERNAL *) HeapAlloc (GetProcessHeap (), 0,
}
else
AttachConsole (ATTACH_PARENT_PROCESS);
+ init_console_handler (true);
}
}
else if (pcon_pid_self (ttyp->pcon_pid))
/* Detach from console device and create new invisible console. */
FreeConsole();
fhandler_console::need_invisible (true);
+ init_console_handler (true);
get_ttyp ()->need_invisible_console = false;
get_ttyp ()->invisible_console_pid = myself->pid;
}
CloseHandle (pcon_owner);
FreeConsole ();
AttachConsole (get_ttyp ()->pcon_pid);
+ init_console_handler (true);
attach_restore = true;
}
WaitForSingleObject (input_mutex, mutex_timeout);
}
else
AttachConsole (ATTACH_PARENT_PROCESS);
+ init_console_handler (true);
}
}
ReleaseMutex (pcon_mutex);