]> Zhao Yanbai Git Server - minix.git/commitdiff
don't flush output for SIGWINCH. found by Joren l'Ami.
authorBen Gras <ben@minix3.org>
Mon, 6 Apr 2009 09:39:42 +0000 (09:39 +0000)
committerBen Gras <ben@minix3.org>
Mon, 6 Apr 2009 09:39:42 +0000 (09:39 +0000)
drivers/tty/keyboard.c
drivers/tty/pty.c
drivers/tty/rs232.c
drivers/tty/tty.c
drivers/tty/tty.h

index 8fc9176f415ea4979347fe90b4354fa79f234846..018ce01189eaa16b3a1a4bf1af4eabef2e355c24 100644 (file)
@@ -609,9 +609,9 @@ int try;
            switch(ch) {
                case CF1: show_key_mappings(); break; 
                case CF3: toggle_scroll(); break; /* hardware <-> software */   
-               case CF7: sigchar(&tty_table[CONSOLE], SIGQUIT); break;
-               case CF8: sigchar(&tty_table[CONSOLE], SIGINT); break;
-               case CF9: sigchar(&tty_table[CONSOLE], SIGKILL); break;
+               case CF7: sigchar(&tty_table[CONSOLE], SIGQUIT, 1); break;
+               case CF8: sigchar(&tty_table[CONSOLE], SIGINT, 1); break;
+               case CF9: sigchar(&tty_table[CONSOLE], SIGKILL, 1); break;
            }
        }
   }
index ca408d691f73d48d2bb398efdda0dbd6aac130b7..d7949f8c5d0b6e852c18b4ad83e425835dbdcf54 100644 (file)
@@ -172,7 +172,7 @@ message *m_ptr;
                pp->state = 0;
        } else {
                pp->state |= PTY_CLOSED;
-               sigchar(tp, SIGHUP);
+               sigchar(tp, SIGHUP, 1);
        }
        break;
 
index aed377b251d1288c8161228d6ddbc31ff97aba53..3066240420f77c1ca2ec527bbf55a6c1864e28fd 100644 (file)
@@ -612,7 +612,7 @@ int try;
        rs->ostate &= ~ODEVHUP;         /* save ostate, clear DEVHUP */
        unlock();
        if (ostate & ODEVHUP) {
-               sigchar(tp, SIGHUP);
+               sigchar(tp, SIGHUP, 1);
                tp->tty_termios.c_ospeed = B0;  /* Disable further I/O. */
                return 0;
        }
index 537109996060e09b8ba56c178d35d191effae815..c87301fa3f5638fa818ba276fe5d4a9b0a6132c4 100644 (file)
@@ -672,7 +672,7 @@ int safe;
           r = sys_vircopy( m_ptr->IO_ENDPT, D, (vir_bytes) m_ptr->ADDRESS,
                SELF, D, (vir_bytes) &tp->tty_winsize, (vir_bytes) size);
        }
-       sigchar(tp, SIGWINCH);
+       sigchar(tp, SIGWINCH, 0);
        break;
 
 #if (MACHINE == IBM_PC)
@@ -1097,7 +1097,7 @@ int count;                        /* number of input characters */
                                        || ch == tp->tty_termios.c_cc[VQUIT]) {
                        sig = SIGINT;
                        if (ch == tp->tty_termios.c_cc[VQUIT]) sig = SIGQUIT;
-                       sigchar(tp, sig);
+                       sigchar(tp, sig, 1);
                        (void) tty_echo(tp, ch);
                        continue;
                }
@@ -1445,7 +1445,7 @@ tty_t *tp;
   }
 
   /* Setting the output speed to zero hangs up the phone. */
-  if (tp->tty_termios.c_ospeed == B0) sigchar(tp, SIGHUP);
+  if (tp->tty_termios.c_ospeed == B0) sigchar(tp, SIGHUP, 1);
 
   /* Set new line speed, character size, etc at the device level. */
   (*tp->tty_ioctl)(tp, 0);
@@ -1489,9 +1489,10 @@ int status;                      /* reply code */
 /*===========================================================================*
  *                             sigchar                                      *
  *===========================================================================*/
-PUBLIC void sigchar(tp, sig)
+PUBLIC void sigchar(tp, sig, mayflush)
 register tty_t *tp;
 int sig;                       /* SIGINT, SIGQUIT, SIGKILL or SIGHUP */
+int mayflush;
 {
 /* Process a SIGINT, SIGQUIT or SIGKILL char from the keyboard or SIGHUP from
  * a tty close, "stty 0", or a real RS-232 hangup.  MM will send the signal to
@@ -1506,7 +1507,7 @@ int sig;                  /* SIGINT, SIGQUIT, SIGKILL or SIGHUP */
       }
   }
 
-  if (!(tp->tty_termios.c_lflag & NOFLSH)) {
+  if (mayflush && !(tp->tty_termios.c_lflag & NOFLSH)) {
        tp->tty_incount = tp->tty_eotct = 0;    /* kill earlier input */
        tp->tty_intail = tp->tty_inhead;
        (*tp->tty_ocancel)(tp, 0);                      /* kill all output */
index d2add844811735b316bf767b11bfcf5d0297f17e..7defd7719ad049783d0b5b53e87a39d6fe881a62 100644 (file)
@@ -148,7 +148,7 @@ extern struct kmessages kmess;
 /* Function prototypes for TTY driver. */
 /* tty.c */
 _PROTOTYPE( void handle_events, (struct tty *tp)                       );
-_PROTOTYPE( void sigchar, (struct tty *tp, int sig)                    );
+_PROTOTYPE( void sigchar, (struct tty *tp, int sig, int mayflush)      );
 _PROTOTYPE( void tty_task, (void)                                      );
 _PROTOTYPE( int in_process, (struct tty *tp, char *buf, int count)     );
 _PROTOTYPE( void out_process, (struct tty *tp, char *bstart, char *bpos,