From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4925 invoked by alias); 3 Oct 2016 10:18:52 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39545 Received: (qmail 8949 invoked from network); 3 Oct 2016 10:18:52 -0000 X-Qmail-Scanner-Diagnostics: from mailout3.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(210.118.77.13):SA:0(-3.1/5.0):. Processed in 0.575031 secs); 03 Oct 2016 10:18:52 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at samsung.com does not designate permitted sender hosts) X-AuditID: cbfec7ef-f79e76d000005b57-52-57f23084f65d Date: Mon, 03 Oct 2016 11:18:40 +0100 From: Peter Stephenson To: Zsh hackers list Subject: Re: [BUG] queueing_enabled grows infinitely when in .recursive-edit Message-id: <20161003111840.3e5081f0@pwslap01u.europe.root.pri> In-reply-to: <161002162145.ZM22574@torch.brasslantern.com> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNIsWRmVeSWpSXmKPExsWy7djP87otBp/CDT4+FLY42PyQyYHRY9XB D0wBjFFcNimpOZllqUX6dglcGWfer2Yp+KNd8WtzA3sD437FLkZODgkBE4ll3beZIGwxiQv3 1rOB2EICyxgl1p6u7WLkArJ7mSRav8xmgWm4fOUVE0QCqOj7izMsEM40Joln/V1QzmlGiXft U1ghnDOMEn17N4L1swioSux71MoOYrMJGEpM3TSbEcQWEdCS2HHyJNBcDg5hAR+JRctNQMK8 AvYStw4eZgQJcwpYSfz+YQUS5hfQl7j69xPU2fYSM6+cYYQoF5T4Mfke2CZmAR2Jbdses0PY 8hKb17xlBjlHQqCZXeJS0yYWkJkSArISmw4wQ8xxkbiy8CwrhC0s8er4FnYIW0ais+Mg1K5+ Rokn3b4Qc2YwSpw+s4MNImEt0Xf7IiPEMj6JSdumM0PM55XoaBOCKPGQeHD0GtRMR4n+H40s ExgVZyE5exaSs2chOXsBI/MqRpHU0uLc9NRiQ73ixNzi0rx0veT83E2MwCRw+t/x9zsYnzaH HGIU4GBU4uG9wPIxXIg1say4MvcQowQHs5II70a9T+FCvCmJlVWpRfnxRaU5qcWHGKU5WJTE efcuuBIuJJCeWJKanZpakFoEk2Xi4JRqYFzmnv7/cct9cZ20Y/a3HyvWLtae9Hvvdp8dTyOe M69TjzX8aKjOdk592tW7Z5Vsrd4W26+6+LFpweUz6dcsDtr2yZSHrnfzkI5ZOvucvcemebf/ rzT4uL55MoN8uWOGQkzhkrV6uxdozCpbpO2g7R/W+ugeH7+Ya8MS2wi9mdsWvb2Vfq3m314l luKMREMt5qLiRAA9oK1b/gIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKIsWRmVeSWpSXmKPExsVy+t/xK7qpBp/CDb4ukLY42PyQyYHRY9XB D0wBjFFuNhmpiSmpRQqpecn5KZl56bZKoSFuuhZKCnmJuam2ShG6viFBSgpliTmlQJ6RARpw cA5wD1bSt0twyzjzfjVLwR/til+bG9gbGPcrdjFyckgImEhcvvKKCcIWk7hwbz1bFyMXh5DA EkaJWdO+sUI4M5gkZm2bwgLhnGaUuHz1OjuEc4ZRomXJQXaQfhYBVYl9j1rBbDYBQ4mpm2Yz gtgiAloSO06eBNrBwSEs4COxaLkJSJhXwF7i1sHDjCBhTgErid8/rCBGXmOUOPVtPVgrv4C+ xNW/n6DOs5eYeeUMI0SvoMSPyfdYQGxmoPGbtzWxQtjyEpvXvGUGsYUE1CVu3N3NPoFReBaS lllIWmYhaVnAyLyKUSS1tDg3PbfYUK84Mbe4NC9dLzk/dxMjMIq2Hfu5eQfjpY3BhxgFOBiV eHgvsHwMF2JNLCuuzD3EKMHBrCTCu1HvU7gQb0piZVVqUX58UWlOavEhRlNguExklhJNzgdG eF5JvKGJobmloZGxhYW5kZGSOG/JhyvhQgLpiSWp2ampBalFMH1MHJxSDYyaHxYUCl/8dbZU 33nbaf8H7zJDp7aJLPb5xh9n5pA3pyf77rNP/so2G2ec7eIT7H97tcW2W63wSs2lW88XHGDX Ff20MjT2ZLyB0LGeBYLh2dfu6SbuWHr3sdnM17u8Nun/UlrK/U9+l+G1gisfGYTS9ufm8foa remVTmxZuUYtT+NwHcebVl0lluKMREMt5qLiRABblassuAIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161003101843eucas1p2eeca1708e3ea8f0f0650763123c3642f X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUb?= =?UTF-8?B?7IK87ISx7KCE7J6QG1ByaW5jaXBhbCBFbmdpbmVlciwgU29mdHdhcmU=?= X-Global-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUbU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtQcmluY2lwYWwgRW5naW5lZXIsIFNvZnR3YXJl?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDA1Q0QwNTAwNTg=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20161002233734eucas1p1136e84f7a57eaf467c44d8d7446856df X-RootMTR: 20161002233734eucas1p1136e84f7a57eaf467c44d8d7446856df References: <161002162145.ZM22574@torch.brasslantern.com> On Sun, 02 Oct 2016 16:21:45 -0700 Bart Schaefer wrote: > The third is that somewhere below execstring() from checksched(), > the signal queueing level is being incremented but not decremented. Here are some missing unqueue_signals() (this was quite boring, by the way, just in case you were thinking "wow, wish I'd done that"). Most of these look minor but the one in execpline() looks like it could be hairy because most things in execpline() are hairy. I think they're all uncontroversial once you've seen them, but I could have slipped up as there are quite a few. pws diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c index 27b78cd..e9bad1c 100644 --- a/Src/Zle/computil.c +++ b/Src/Zle/computil.c @@ -4865,6 +4865,7 @@ bin_compfiles(char *nam, char **args, UNUSED(Options ops), UNUSED(int func)) } queue_signals(); if (!(tmp = getaparam(args[1]))) { + unqueue_signals(); zwarnnam(nam, "unknown parameter: %s", args[1]); return 0; } diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index 0bdd82b..0b3b1fc 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -1631,6 +1631,7 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func)) return 1; } else if (v) { if (*s) { + unqueue_signals(); zwarnnam(name, "not an identifier: `%s'", args[0]); return 1; } diff --git a/Src/builtin.c b/Src/builtin.c index 60dc07f..a274ff7 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -1489,6 +1489,7 @@ bin_fc(char *nam, char **argv, Options ops, int func) } if (zleactive) { + unqueue_signals(); zwarnnam(nam, "no interactive history within ZLE"); return 1; } @@ -2808,6 +2809,7 @@ bin_typeset(char *name, char **argv, LinkList assigns, Options ops, int func) return 0; } if (off & PM_TIED) { + unqueue_signals(); zerrnam(name, "use unset to remove tied variables"); return 1; } @@ -3138,6 +3140,7 @@ bin_functions(char *name, char **argv, Options ops, int func) queue_signals(); for (q = mathfuncs; q; q = q->next) { if (!strcmp(q->name, funcname)) { + unqueue_signals(); zwarnnam(name, "-M %s: function already exists", funcname); zsfree(p->name); diff --git a/Src/exec.c b/Src/exec.c index a429428..9890286 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1795,6 +1795,8 @@ execpline(Estate state, wordcode slcode, int how, int last1) deletejob(jn, 0); thisjob = pj; } + else + unqueue_signals(); if ((slflags & WC_SUBLIST_NOT) && !errflag) lastval = !lastval; } @@ -5556,6 +5558,7 @@ runshfunc(Eprog prog, FuncWrap wrap, char *name) if (!cont) { if (ou) zfree(ou, ouu); + unqueue_signals(); return; } wrap = wrap->next; diff --git a/Src/hist.c b/Src/hist.c index 5fc40bd..eebd7dc 100644 --- a/Src/hist.c +++ b/Src/hist.c @@ -653,6 +653,7 @@ histsubchar(int c) (c == '}' || c == ';' || c == '\'' || c == '"' || c == '`')) { /* Neither event nor word designator, no expansion */ safeinungetc(c); + unqueue_signals(); return bangchar; } *ptr = 0; diff --git a/Src/init.c b/Src/init.c index 3dea179..c12043b 100644 --- a/Src/init.c +++ b/Src/init.c @@ -1442,8 +1442,10 @@ sourcehome(char *s) queue_signals(); if (EMULATION(EMULATE_SH|EMULATE_KSH) || !(h = getsparam_u("ZDOTDIR"))) { h = home; - if (!h) + if (!h) { + unqueue_signals(); return; + } } { diff --git a/Src/mem.c b/Src/mem.c index 021dad5..db311ef 100644 --- a/Src/mem.c +++ b/Src/mem.c @@ -903,11 +903,15 @@ memory_validate(Heapid heap_id) queue_signals(); for (h = heaps; h; h = h->next) { - if (h->heap_id == heap_id) + if (h->heap_id == heap_id) { + unqueue_signals(); return 0; + } for (hs = heaps->sp; hs; hs = hs->next) { - if (hs->heap_id == heap_id) + if (hs->heap_id == heap_id) { + unqueue_signals(); return 0; + } } } diff --git a/Src/module.c b/Src/module.c index 46a7d77..41f142a 100644 --- a/Src/module.c +++ b/Src/module.c @@ -2242,6 +2242,7 @@ load_module(char const *name, Feature_enables enablesarr, int silent) return 0; } if (m->node.flags & MOD_BUSY) { + unqueue_signals(); zerr("circular dependencies for module ;%s", name); return 1; } diff --git a/Src/params.c b/Src/params.c index e115102..1418021 100644 --- a/Src/params.c +++ b/Src/params.c @@ -2803,6 +2803,7 @@ assignsparam(char *s, char *val, int flags) zerr("read-only variable: %s", v->pm->node.nam); *ss = '['; zsfree(val); + unqueue_signals(); return NULL; } flags &= ~ASSPM_WARN_CREATE; @@ -3117,6 +3118,7 @@ setnparam(char *s, mnumber val) if (!(v = getvalue(&vbuf, &t, 1))) { DPUTS(!v, "BUG: value not found for new parameter"); /* errflag |= ERRFLAG_ERROR; */ + unqueue_signals(); return NULL; } if (!was_unset && isset(WARNCREATEGLOBAL) && locallevel > forklevel) diff --git a/Src/prompt.c b/Src/prompt.c index d4f3898..ee77c8b 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -491,8 +491,10 @@ putpromptchar(int doprint, int endchar, unsigned int *txtchangep) if (!arg) arg++; queue_signals(); - if (!(hostnam = getsparam("HOST"))) + if (!(hostnam = getsparam("HOST"))) { + unqueue_signals(); break; + } if (arg < 0) { for (ss = hostnam + strlen(hostnam); ss > hostnam; ss--) if (ss[-1] == '.' && !++arg)