Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: zsh 4.3.10 terminates with SIGINT when one types Ctrl-G in emacs under Mac OS X
- X-seq: zsh-workers 27169
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: Re: zsh 4.3.10 terminates with SIGINT when one types Ctrl-G in emacs under Mac OS X
- Date: Sun, 19 Jul 2009 13:14:17 -0700
- In-reply-to: <090719121557.ZM3304@xxxxxxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <schaefer@xxxxxxxxxxxxxxxx> <090712193623.ZM14823@xxxxxxxxxxxxxxxxxxxxxx> <200907131839.n6DIdO6Z003291@xxxxxxxxxxxxxxxxxxx> <20090716162419.GA26179@xxxxxxxxxxxxxxxxxxx> <090717222936.ZM8648@xxxxxxxxxxxxxxxxxxxxxx> <20090718101602.GA5392@xvii> <090718111615.ZM10393@xxxxxxxxxxxxxxxxxxxxxx> <090719110339.ZM3126@xxxxxxxxxxxxxxxxxxxxxx> <090719121557.ZM3304@xxxxxxxxxxxxxxxxxxxxxx>
On Jul 19, 12:15pm, Bart Schaefer wrote:
}
} The only way I can see to fix this is to re-introduce the wait_cmd second
} argument to signal_suspend(). PWS? Any thoughts?
Here's a patch in case there's agreement this is the right approach.
Apply *instead of* zsh-workers/27165. Line numbers may be wonky in
the jobs.c patch.
Index: Src/jobs.c
===================================================================
--- Src/jobs.c 17 Apr 2009 18:57:22 -0000 1.27
+++ Src/jobs.c 19 Jul 2009 19:19:10 -0000
@@ -1178,7 +1191,7 @@
kill(pid, SIGCONT);
last_signal = -1;
- signal_suspend(SIGCHLD);
+ signal_suspend(SIGCHLD, wait_cmd);
if (last_signal != SIGCHLD && wait_cmd && last_signal >= 0 &&
(sigtrapped[last_signal] & ZSIG_TRAPPED)) {
/* wait command interrupted, but no error: return */
@@ -1217,7 +1230,7 @@
while (!errflag && jn->stat &&
!(jn->stat & STAT_DONE) &&
!(interact && (jn->stat & STAT_STOPPED))) {
- signal_suspend(SIGCHLD);
+ signal_suspend(SIGCHLD, wait_cmd);
if (last_signal != SIGCHLD && wait_cmd && last_signal >= 0 &&
(sigtrapped[last_signal] & ZSIG_TRAPPED))
{
Index: Src/signals.c
===================================================================
--- Src/signals.c 28 Feb 2009 07:13:37 -0000 1.22
+++ Src/signals.c 19 Jul 2009 20:07:04 -0000
@@ -342,29 +342,32 @@
/**/
int
-signal_suspend(UNUSED(int sig))
+signal_suspend(UNUSED(int sig), int wait_cmd)
{
int ret;
-
-#ifdef POSIX_SIGNALS
+
+#if defined(POSIX_SIGNALS) || defined(BSD_SIGNALS)
sigset_t set;
-#ifdef BROKEN_POSIX_SIGSUSPEND
+# if defined(POSIX_SIGNALS) && defined(BROKEN_POSIX_SIGSUSPEND)
sigset_t oset;
-#endif /* BROKEN_POSIX_SIGSUSPEND */
+# endif
sigemptyset(&set);
-#ifdef BROKEN_POSIX_SIGSUSPEND
+ if (!(wait_cmd || isset(TRAPSASYNC) ||
+ (sigtrapped[SIGINT] & ~ZSIG_IGNORED)))
+ sigaddset(&set, SIGINT);
+#endif /* POSIX_SIGNALS || BSD_SIGNALS */
+
+#ifdef POSIX_SIGNALS
+# ifdef BROKEN_POSIX_SIGSUSPEND
sigprocmask(SIG_SETMASK, &set, &oset);
pause();
sigprocmask(SIG_SETMASK, &oset, NULL);
-#else /* not BROKEN_POSIX_SIGSUSPEND */
+# else /* not BROKEN_POSIX_SIGSUSPEND */
ret = sigsuspend(&set);
-#endif /* BROKEN_POSIX_SIGSUSPEND */
+# endif /* BROKEN_POSIX_SIGSUSPEND */
#else /* not POSIX_SIGNALS */
# ifdef BSD_SIGNALS
- sigset_t set;
-
- sigemptyset(&set);
ret = sigpause(set);
# else
# ifdef SYSV_SIGNALS
Messages sorted by:
Reverse Date,
Date,
Thread,
Author