From 88fe824ddfe1bb635f93e95098346725d864284a Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 13 Jul 2018 11:26:57 -0600 Subject: [PATCH] Add some error handling to async response handler We only want to read data in case of POLLIN or POLLHUP. Not POLLNVAL or select error. We always want to remove the handler, so it doesn't get called in an infinite loop when error is nval or err. In zsh source, see main zle event loop in zle_main.c raw_getbyte function. --- src/async.zsh | 12 ++++++++---- zsh-autosuggestions.zsh | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/async.zsh b/src/async.zsh index 296c1c2..5c19a81 100644 --- a/src/async.zsh +++ b/src/async.zsh @@ -41,10 +41,14 @@ _zsh_autosuggest_async_request() { # First arg will be fd ready for reading # Second arg will be passed in case of error _zsh_autosuggest_async_response() { - # Read everything from the fd and give it as a suggestion - zle autosuggest-suggest -- "$(cat <&$1)" + if [[ -z "$2" || "$2" == "hup" ]]; then + # Read everything from the fd and give it as a suggestion + zle autosuggest-suggest -- "$(cat <&$1)" - # Remove the handler and close the fd + # Close the fd + exec {1}<&- + fi + + # Always remove the handler zle -F "$1" - exec {1}<&- } diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index 3e7560a..27c42c6 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -720,12 +720,16 @@ _zsh_autosuggest_async_request() { # First arg will be fd ready for reading # Second arg will be passed in case of error _zsh_autosuggest_async_response() { - # Read everything from the fd and give it as a suggestion - zle autosuggest-suggest -- "$(cat <&$1)" + if [[ -z "$2" || "$2" == "hup" ]]; then + # Read everything from the fd and give it as a suggestion + zle autosuggest-suggest -- "$(cat <&$1)" - # Remove the handler and close the fd + # Close the fd + exec {1}<&- + fi + + # Always remove the handler zle -F "$1" - exec {1}<&- } #--------------------------------------------------------------------#