* Zle goes through select() quickly growin # of times
@ 2018-06-17 20:23 Sebastian Gniazdowski
2018-06-17 20:25 ` Sebastian Gniazdowski
2018-06-17 20:39 ` Sebastian Gniazdowski
0 siblings, 2 replies; 3+ messages in thread
From: Sebastian Gniazdowski @ 2018-06-17 20:23 UTC (permalink / raw)
To: Zsh hackers list
[-- Attachment #1: Type: text/plain, Size: 1274 bytes --]
Hello,
I'm debugging the reason why Ctrl-C can be ignored. U stumbled upon this:
1. I open shell, enter "ls ", then press Ctrl-C
2. Debug logs from before "< master Zle select()" and after "> master
Zle select()" occur
3. At first Ctrl-C, there are 24 select() recurrent code execution
paths – the logs around select() are triggered ~24 times.
4. At second "ls <Ctrl-C>", there are 96 recurrent code paths.
5. At third "ls <Ctrl-C>, there are 197 recurrent code paths.
The logs are:
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0,
exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0,
exit_pending: 0
two lines, installed before master select() (first line) and after the
master select (second line).
Could it be that Zsh reacts in this way after occurring Ctrl-C? It's
somewhat hard to believe. That's why I include also patch with debug
prints that I've used. Maybe someone will just apply it and do "ls
<Ctrl-C>".
Also: asciinema recording, showing how the series of logs grow (1 tmux
screen / page, then 4 tmux screens / pages, then 9 pages to scroll up
to see the logs beginnings'):
https://asciinema.org/a/hC24KqphbztwQfk5ApZbOYU2y
--
Best regards,
Sebastian Gniazdowski
[-- Attachment #2: count.txt --]
[-- Type: text/plain, Size: 26238 bytes --]
Effect of first "ls <break>"
24 debug-log-lines that are mainly placed before & after the main select().
(the lines "BASIC < select ...", "BASIC > select ..." denote "before" and "after" the select)
It's "ls <Ctrl-C>" that yielded this:
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 2, retflag: 0, breaks: 0, exit_pending: 0
Effect of second "ls <break>"
96 debug-log-lines that are mainly placed before & after the main select().
It's "ls <Ctrl-C>" that yielded this:
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 2, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 2, retflag: 0, breaks: 0, exit_pending: 0
Effect of third "ls <break>"
197 debug-log-lines that are mainly placed before & after the main select()
It's third "ls <Ctrl-C>" that yielded this:
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 2, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 2, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: -1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 1, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
== FOR (;;)! kungetct: 0, kungetsz: 32
== ... continuing:: BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0, exit_pending: 0
BASIC > select After: selret: -1, errflag: 2, retflag: 0, breaks: 0, exit_pending: 0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Zle goes through select() quickly growin # of times
2018-06-17 20:23 Zle goes through select() quickly growin # of times Sebastian Gniazdowski
@ 2018-06-17 20:25 ` Sebastian Gniazdowski
2018-06-17 20:39 ` Sebastian Gniazdowski
1 sibling, 0 replies; 3+ messages in thread
From: Sebastian Gniazdowski @ 2018-06-17 20:25 UTC (permalink / raw)
To: Zsh hackers list
[-- Attachment #1: Type: text/plain, Size: 1532 bytes --]
The forgotten debug prints patch, attached. First file count.txt is
just a proof that I'm not making this up ;)
On 17 June 2018 at 22:23, Sebastian Gniazdowski <sgniazdowski@gmail.com> wrote:
> Hello,
> I'm debugging the reason why Ctrl-C can be ignored. U stumbled upon this:
>
> 1. I open shell, enter "ls ", then press Ctrl-C
> 2. Debug logs from before "< master Zle select()" and after "> master
> Zle select()" occur
> 3. At first Ctrl-C, there are 24 select() recurrent code execution
> paths – the logs around select() are triggered ~24 times.
> 4. At second "ls <Ctrl-C>", there are 96 recurrent code paths.
> 5. At third "ls <Ctrl-C>, there are 197 recurrent code paths.
>
> The logs are:
>
> BASIC < select Before: selret: 0, errflag: 0, retflag: 0, breaks: 0,
> exit_pending: 0
> BASIC > select After: selret: 0, errflag: 0, retflag: 0, breaks: 0,
> exit_pending: 0
>
> two lines, installed before master select() (first line) and after the
> master select (second line).
>
> Could it be that Zsh reacts in this way after occurring Ctrl-C? It's
> somewhat hard to believe. That's why I include also patch with debug
> prints that I've used. Maybe someone will just apply it and do "ls
> <Ctrl-C>".
>
> Also: asciinema recording, showing how the series of logs grow (1 tmux
> screen / page, then 4 tmux screens / pages, then 9 pages to scroll up
> to see the logs beginnings'):
>
> https://asciinema.org/a/hC24KqphbztwQfk5ApZbOYU2y
>
> --
> Best regards,
> Sebastian Gniazdowski
[-- Attachment #2: select_recurrence_debug_prints.diff.txt --]
[-- Type: text/plain, Size: 3156 bytes --]
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index b78c47e..d95eaad 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -343,8 +343,12 @@ static int kungetsz;
void
ungetbyte(int ch)
{
- if (kungetct == kungetsz)
+ if (kungetct == kungetsz) {
+ fprintf( fopen("/tmp/reply", "a"), "== kungetct: %d, kungetsz: %d\n == ... realloc kungetsz*2 :: ", kungetct, kungetsz );
kungetbuf = realloc(kungetbuf, kungetsz *= 2);
+ } else {
+ fprintf( fopen("/tmp/reply", "a"), "== kungetct: %d, kungetsz: %d\n == ... NO realloc:: ", kungetct, kungetsz );
+ }
kungetbuf[kungetct++] = ch;
}
@@ -527,6 +531,7 @@ raw_getbyte(long do_keytmout, char *cptr)
*/
if ((nwatch || tmout.tp != ZTM_NONE)) {
#if defined(HAVE_SELECT) || defined(HAVE_POLL)
+#warning Yes, declaring selret ---------------------
int i, errtry = 0, selret;
# ifdef HAVE_POLL
int nfds;
@@ -581,9 +586,15 @@ raw_getbyte(long do_keytmout, char *cptr)
else
poll_timeout = -1;
+ fprintf( fopen("/tmp/reply", "a"), "BASIC <poll Before[poll]: selret: %d, errflag: %d, retflag: %d, breaks: %d, exit_pending: %d\n",
+ selret, errflag, retflag, breaks, exit_pending );
+
winch_unblock();
selret = poll(fds, errtry ? 1 : nfds, poll_timeout);
winch_block();
+
+ fprintf( fopen("/tmp/reply", "a"), "BASIC >poll After[poll]: selret: %d, errflag: %d, retflag: %d, breaks: %d, exit_pending: %d\n",
+ selret, errflag, retflag, breaks, exit_pending );
# else
int fdmax = SHTTY;
struct timeval *tvptr;
@@ -611,10 +622,16 @@ raw_getbyte(long do_keytmout, char *cptr)
else
tvptr = NULL;
+ fprintf( fopen("/tmp/reply", "a"), "BASIC < select Before: selret: %d, errflag: %d, retflag: %d, breaks: %d, exit_pending: %d\n",
+ selret, errflag, retflag, breaks, exit_pending );
+
winch_unblock();
selret = select(fdmax+1, (SELECT_ARG_2_T) & foofd,
NULL, NULL, tvptr);
winch_block();
+
+ fprintf( fopen("/tmp/reply", "a"), "BASIC > select After: selret: %d, errflag: %d, retflag: %d, breaks: %d, exit_pending: %d\n",
+ selret, errflag, retflag, breaks, exit_pending );
# endif
/*
* Make sure a user interrupt gets passed on straight away.
@@ -864,10 +881,16 @@ getbyte(long do_keytmout, int *timeout)
lastchar_wide_valid = 0;
#endif
- if (kungetct)
+ if (kungetct) {
ret = STOUC(kungetbuf[--kungetct]);
- else {
+ fprintf( fopen("/tmp/reply", "a"), "== DIRECT! kungetct: %d, kungetsz: %d\n == ... continuing:: "
+ "errflag: %d, retflag: %d, breaks: %d, exit_pending: %d\n",
+ kungetct, kungetsz,
+ errflag, retflag, breaks, exit_pending );
+ } else {
for (;;) {
+ fprintf( fopen("/tmp/reply", "a"), "== FOR (;;)! kungetct: %d, kungetsz: %d\n == ... continuing:: \n",
+ kungetct, kungetsz );
int q = queue_signal_level();
dont_queue_signals();
r = raw_getbyte(do_keytmout, &cc);
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Zle goes through select() quickly growin # of times
2018-06-17 20:23 Zle goes through select() quickly growin # of times Sebastian Gniazdowski
2018-06-17 20:25 ` Sebastian Gniazdowski
@ 2018-06-17 20:39 ` Sebastian Gniazdowski
1 sibling, 0 replies; 3+ messages in thread
From: Sebastian Gniazdowski @ 2018-06-17 20:39 UTC (permalink / raw)
To: Zsh hackers list
On 17 June 2018 at 22:23, Sebastian Gniazdowski <sgniazdowski@gmail.com> wrote:
> Could it be that Zsh reacts in this way after occurring Ctrl-C? It's
> somewhat hard to believe.
I did test on "zsh -f" and the problem doesn't occur. So it might be
an effect of a plugin. I will check this.
--
Best regards,
Sebastian Gniazdowski
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-06-17 20:39 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-17 20:23 Zle goes through select() quickly growin # of times Sebastian Gniazdowski
2018-06-17 20:25 ` Sebastian Gniazdowski
2018-06-17 20:39 ` Sebastian Gniazdowski
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).