Blob Blame History Raw
--- tcsh-6.17.00/sh.proc.c	2009-06-25 23:15:37.000000000 +0200
+++ sh.proc.c	2010-11-25 17:36:16.500751242 +0100
@@ -596,6 +596,10 @@ loop:
 	    pp->p_flags & PRUNNING) {
 	    handle_pending_signals();
 	    sigsuspend(&pause_mask);
+	    if (pintr_pending) {
+		handle_pending_signals();
+		break;
+	    }
 	    handle_pending_signals();
 	    goto loop;
 	}
--- tcsh-6.17.00/sh.h	2009-06-25 23:27:37.000000000 +0200
+++ sh.h	2010-11-26 11:42:16.160119671 +0100
@@ -533,6 +533,7 @@ typedef union {
  * Global flags
  */
 EXTERN int    chkstop IZERO;	/* Warned of stopped jobs... allow exit */
+EXTERN volatile sig_atomic_t pintr_pending;	/* Interrupted by SIGINT */
 
 #if (defined(FIOCLEX) && defined(FIONCLEX)) || defined(F_SETFD)
 # define CLOSE_ON_EXEC
--- tcsh-6.17.00/tc.sig.c	2006-08-24 22:56:31.000000000 +0200
+++ tc.sig.c	2010-11-26 11:40:09.779223509 +0100
@@ -55,7 +55,7 @@ sigset_interrupting(int sig, void (*fn) 
 static volatile sig_atomic_t alrmcatch_pending; /* = 0; */
 static volatile sig_atomic_t pchild_pending; /* = 0; */
 static volatile sig_atomic_t phup_pending; /* = 0; */
-static volatile sig_atomic_t pintr_pending; /* = 0; */
+volatile sig_atomic_t pintr_pending; /* = 0; */
 int alrmcatch_disabled; /* = 0; */
 int phup_disabled; /* = 0; */
 int pchild_disabled; /* = 0; */