diff --git a/src/process.c b/src/process.c index 746cdc0428..5b833187d5 100644 --- a/src/process.c +++ b/src/process.c @@ -6921,15 +6921,26 @@ of incoming traffic. */) (Lisp_Object process, Lisp_Object current_group) { if (PROCESSP (process) && (NETCONN_P (process) || SERIALCONN_P (process) - || PIPECONN_P (process))) + || PIPECONN_P (process) + || (EQ (Fprocess_type (process), Qreal) + && NILP (Fprocess_tty_name (process))))) { struct Lisp_Process *p; p = XPROCESS (process); - if (NILP (p->command) + if ((NILP (p->command) + || (EQ (Fprocess_type (process), Qreal) + && NILP (Fprocess_tty_name (process)))) && p->infd >= 0) delete_read_fd (p->infd); - pset_command (p, Qt); + + if (NILP (p->command)) + pset_command (p, Qt); + else if (EQ (Fprocess_type (process), Qreal) + && NILP (Fprocess_tty_name (process))) + Fset_process_plist (process, + Fplist_put (Fprocess_plist (process), + Qstop, Qt)); return process; } #ifndef SIGTSTP @@ -6948,13 +6959,18 @@ traffic. */) (Lisp_Object process, Lisp_Object current_group) { if (PROCESSP (process) && (NETCONN_P (process) || SERIALCONN_P (process) - || PIPECONN_P (process))) + || PIPECONN_P (process) + || (EQ (Fprocess_type (process), Qreal) + && NILP (Fprocess_tty_name (process))))) { struct Lisp_Process *p; p = XPROCESS (process); eassert (p->infd < FD_SETSIZE); - if (EQ (p->command, Qt) + if ((EQ (p->command, Qt) + || (EQ (Fprocess_type (process), Qreal) + && NILP (Fprocess_tty_name (process)) + && EQ (Fplist_get (Fprocess_plist (process), Qstop), Qt))) && p->infd >= 0 && (!EQ (p->filter, Qt) || EQ (p->status, Qlisten))) { @@ -6966,7 +6982,14 @@ traffic. */) tcflush (p->infd, TCIFLUSH); #endif /* not WINDOWSNT */ } - pset_command (p, Qnil); + if (EQ (p->command, Qt)) + pset_command (p, Qnil); + else if (EQ (Fprocess_type (process), Qreal) + && NILP (Fprocess_tty_name (process)) + && EQ (Fplist_get (Fprocess_plist (process), Qstop), Qt)) + Fset_process_plist (process, + Fplist_put (Fprocess_plist (process), + Qstop, Qnil)); return process; } #ifdef SIGCONT