From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7957 invoked by alias); 3 Sep 2018 08:24:33 -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: List-Unsubscribe: X-Seq: 43365 Received: (qmail 14066 invoked by uid 1010); 3 Sep 2018 08:24:33 -0000 X-Qmail-Scanner-Diagnostics: from mailout2.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.12):SA:0(-6.9/5.0):. Processed in 2.126954 secs); 03 Sep 2018 08:24:33 -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=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS,SPF_PASS,T_DKIMWL_WL_HIGH,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20180903081655euoutp021eda9e5b87e5629576d0478de7227bb1~Q1dxtlMws1837418374euoutp02a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1535962615; bh=V0k9Ouu3rFoEZN3eivZzcYONbXdm1lV5I2xogOFVJ2A=; h=Date:From:To:Subject:In-Reply-To:References:From; b=W5NhSX8utH0UqBdTuQjvtKuvefHqtEPA5DLtNCybFfCVjMRCQV8+4GWubyP1hMt2R 6NbxYVhdsEG7KvBJy8VwCl6v5MQrZGLPtOEy4KpZBaSmNjVCuaGjHEyNjMY0VmkwAI q7Kz/Nd8MP2AZAwvd4wLEFjK6sEtiOGHQMa2y3gA= X-AuditID: cbfec7f4-c77a99c0000010c6-04-5b8cedf6de0c Date: Mon, 3 Sep 2018 09:16:52 +0100 From: Peter Stephenson To: Zsh hackers list Subject: Re: [BUG?] Very strange behavior, execution of a function is interrupted In-Reply-To: Organization: SCSC X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsWy7djP87rf3vZEG7xYbGBxsPkhkwOjx6qD H5gCGKO4bFJSczLLUov07RK4Mu71P2Av6NKu+LTiLGsDY4NiFyMnh4SAicSLJ1fZuhi5OIQE VjBKXHl2kgXC6WOSeLP6O1Sml0li6uKPrDAtnVMXMkMkljNKrPz4lhmuate9z+wQzmlGibP/ D7ODtAgJnGeUuPdeuYuRg4NFQEVi3R5RkDCbgKHE1E2zGUFsEQEtiR0nTzKB2MICwRKn2pvA 4pwCgRIP2jczg7TyCwhJXGi2hTjCXuLoHohyXgFBiZMzn7CA2MwC8hLb384Bu0dC4DObxO4Z h6CKyiT2vbjCAjJHQsBFYnKbCMQcYYlXx7ewQ9gyEv93zmeC6G1nlFgz6TU7hNPDKLHp6B1G iCprib7bFxlBBjELaEqs36UPEXaUmNW7hhFiPp/EjbeCEPfwSUzaNp0ZIswr0dEmBFGtJrGj aSvjBEblWUg+mIXkg1kI8xcwMq9iFE8tLc5NTy02ykst1ytOzC0uzUvXS87P3cQITASn/x3/ soNx15+kQ4wCHIxKPLwXNHuihVgTy4orcw8xSnAwK4nwfkntihbiTUmsrEotyo8vKs1JLT7E KM3BoiTOy6eVFi0kkJ5YkpqdmlqQWgSTZeLglGpgnLF4c4KlWWVJ9wYb3iIxk28qq4Q65gqd q4hLrGf42OZ/bK6iY8OdP9eOnPvuziG9+zZv+W+9jrCyRVt4OAtd/Ou4XvRd9Al+vkuEdWZM sTj/ud+z/hziYPH/UuNWuPbW579fTr3dqqAv6cKQvONO1sSjp3aGrBDbJs91elKz6cIu318M MqsvK7EUZyQaajEXFScCAKKtAK8AAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuplkeLIzCtJLcpLzFFi42I5/e/4Pd1vb3uiDTad5bQ42PyQyYHRY9XB D0wBjFF6NkX5pSWpChn5xSW2StGGFkZ6hpYWekYmlnqGxuaxVkamSvp2NimpOZllqUX6dgl6 Gff6H7AXdGlXfFpxlrWBsUGxi5GTQ0LARKJz6kLmLkYuDiGBpYwS789+ZIJIyEh8uvKRHcIW lvhzrYsNoqibSeLuz+3sEM5pRonLS1axQjjnGSVWNPWzdDFycLAIqEis2yMK0s0mYCgxddNs RhBbREBLYsfJk2AbhAWCJU61N4HFeQWcJVacOQO2jVMgUOJB+2aokzYxScw+vJodZCa/gJDE hWZbiIvsJY7ugZjDKyAocXLmExYQm1lAR+LEqmPMELa8xPa3c5gnMArPQlI2C0nZLCRlCxiZ VzGKpJYW56bnFhvqFSfmFpfmpesl5+duYgRGxbZjPzfvYLy0MfgQowAHoxIP7wXNnmgh1sSy 4srcQ4wSHMxKIrxfUruihXhTEiurUovy44tKc1KLDzGaAsNiIrOUaHI+MGLzSuINTQ3NLSwN zY3Njc0slMR5zxtURgkJpCeWpGanphakFsH0MXFwSjUwuh8zXn9hhbJa73fhF63H+3uuvtWr ljG/I/I6cWvdChHP3hkOsS96/hazHAzcJnVu0X+WAw972o27P21xbtwz8ZE0r62vzIKQPxvu LPcysp33lFf2jQ7rP6VvBpX3Z39Y99pC8fyyWfpi9x83XStXSeU6m5FdsG3GitzpZrOWhyeJ c7+QPv3ujxJLcUaioRZzUXEiANEThCCgAgAA Message-Id: <20180903081654eucas1p13b45b82c1764fd9ccd025ac798a4cfd3~Q1dwaASzl2666526665eucas1p1N@eucas1p1.samsung.com> X-CMS-MailID: 20180903081654eucas1p13b45b82c1764fd9ccd025ac798a4cfd3 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20180902115423epcas4p3a4e7951e0e9dca434a7bb9e74af32f65 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180902115423epcas4p3a4e7951e0e9dca434a7bb9e74af32f65 References: On Sun, 2 Sep 2018 13:53:40 +0200 Sebastian Gniazdowski wrote: > Guys to state this more simply but also FUD-like: the little `read -q` > brings up front whole Zle-command-line machinery, with sched, zle -F, > waiting for inputs (select) on multiple file descriptors, running > callbacks. This should stop the function execution feature if we're just reading a key, but I haven't checked the details work. diff --git a/Src/Zle/zle_keymap.c b/Src/Zle/zle_keymap.c index 2e96ac7..a5cf101 100644 --- a/Src/Zle/zle_keymap.c +++ b/Src/Zle/zle_keymap.c @@ -1518,7 +1518,7 @@ getrestchar_keybuf(void) * arrive together. If we don't do this the input can * get stuck if an invalid byte sequence arrives. */ - inchar = getbyte(1L, &timeout); + inchar = getbyte(1L, &timeout, 1); /* getbyte deliberately resets lastchar_wide_valid */ lastchar_wide_valid = 1; if (inchar == EOF) { @@ -1673,7 +1673,7 @@ addkeybuf(int c) static int getkeybuf(int w) { - int c = getbyte((long)w, NULL); + int c = getbyte((long)w, NULL, 1); if(c < 0) return EOF; diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index db70e7d..3487b5d 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -452,7 +452,7 @@ struct ztmout { */ static void -calc_timeout(struct ztmout *tmoutp, long do_keytmout) +calc_timeout(struct ztmout *tmoutp, long do_keytmout, int full) { if (do_keytmout && (keytimeout > 0 || do_keytmout < 0)) { if (do_keytmout < 0) @@ -465,7 +465,7 @@ calc_timeout(struct ztmout *tmoutp, long do_keytmout) } else tmoutp->tp = ZTM_NONE; - if (timedfns) { + if (full && timedfns) { for (;;) { LinkNode tfnode = firstnode(timedfns); Timedfn tfdat; @@ -504,7 +504,7 @@ calc_timeout(struct ztmout *tmoutp, long do_keytmout) /* see calc_timeout for use of do_keytmout */ static int -raw_getbyte(long do_keytmout, char *cptr) +raw_getbyte(long do_keytmout, char *cptr, int full) { int ret; struct ztmout tmout; @@ -519,7 +519,7 @@ raw_getbyte(long do_keytmout, char *cptr) # endif #endif - calc_timeout(&tmout, do_keytmout); + calc_timeout(&tmout, do_keytmout, full); /* * Handle timeouts and watched fd's. If a watched fd or a function @@ -684,7 +684,7 @@ raw_getbyte(long do_keytmout, char *cptr) * reconsider the key timeout from scratch. * The effect of this is microscopic. */ - calc_timeout(&tmout, do_keytmout); + calc_timeout(&tmout, do_keytmout, full); break; } /* @@ -810,7 +810,7 @@ raw_getbyte(long do_keytmout, char *cptr) # endif } /* If looping, need to recalculate timeout */ - calc_timeout(&tmout, do_keytmout); + calc_timeout(&tmout, do_keytmout, full); } # ifdef HAVE_POLL zfree(fds, sizeof(struct pollfd) * nfds); @@ -852,7 +852,7 @@ raw_getbyte(long do_keytmout, char *cptr) /**/ mod_export int -getbyte(long do_keytmout, int *timeout) +getbyte(long do_keytmout, int *timeout, int full) { char cc; unsigned int ret; @@ -877,7 +877,7 @@ getbyte(long do_keytmout, int *timeout) for (;;) { int q = queue_signal_level(); dont_queue_signals(); - r = raw_getbyte(do_keytmout, &cc); + r = raw_getbyte(do_keytmout, &cc, full); restore_queue_signals(q); if (r == -2) { /* timeout */ @@ -956,7 +956,7 @@ getbyte(long do_keytmout, int *timeout) mod_export ZLE_INT_T getfullchar(int do_keytmout) { - int inchar = getbyte((long)do_keytmout, NULL); + int inchar = getbyte((long)do_keytmout, NULL, 1); #ifdef MULTIBYTE_SUPPORT return getrestchar(inchar, NULL, NULL); @@ -1021,7 +1021,7 @@ getrestchar(int inchar, char *outstr, int *outcount) * arrive together. If we don't do this the input can * get stuck if an invalid byte sequence arrives. */ - inchar = getbyte(1L, &timeout); + inchar = getbyte(1L, &timeout, 1); /* getbyte deliberately resets lastchar_wide_valid */ lastchar_wide_valid = 1; if (inchar == EOF) { @@ -2139,7 +2139,7 @@ zle_main_entry(int cmd, va_list ap) do_keytmout = va_arg(ap, long); timeout = va_arg(ap, int *); chrp = va_arg(ap, int *); - *chrp = getbyte(do_keytmout, timeout); + *chrp = getbyte(do_keytmout, timeout, 0); break; } diff --git a/Src/Zle/zle_misc.c b/Src/Zle/zle_misc.c index 898b552..612ac21 100644 --- a/Src/Zle/zle_misc.c +++ b/Src/Zle/zle_misc.c @@ -756,7 +756,7 @@ bracketedstring(void) while (endesc[endpos]) { if (current + 1 >= psize) pbuf = zrealloc(pbuf, psize *= 2); - if ((next = getbyte(1L, &timeout)) == EOF) + if ((next = getbyte(1L, &timeout, 1)) == EOF) break; if (!endpos || next != endesc[endpos++]) endpos = (next == *endesc); @@ -970,7 +970,7 @@ universalargument(char **args) * * Hence for now this remains byte-by-byte. */ - while ((gotk = getbyte(0L, NULL)) != EOF) { + while ((gotk = getbyte(0L, NULL, 1)) != EOF) { if (gotk == '-' && !digcnt) { minus = -1; digcnt++; diff --git a/Src/Zle/zle_vi.c b/Src/Zle/zle_vi.c index e0923db..a5ff920 100644 --- a/Src/Zle/zle_vi.c +++ b/Src/Zle/zle_vi.c @@ -131,7 +131,7 @@ vigetkey(void) char m[3], *str; Thingy cmd; - if (getbyte(0L, NULL) == EOF) + if (getbyte(0L, NULL, 1) == EOF) return ZLEEOF; m[0] = lastchar;