On Wednesday, February 19, 2014, lilydjwg wrote: > > > I've checked Src/Zle/zle_main.c and see a "for(;;)" loop. That loop will > break only when no fds are ready, or the user types something. So, > before the user types something and after the watched fd becomes > invalid, zsh keeps poll that fd and gets lots of POLLNVAL. Although it would be better if zsh did not begin hogging the CPU, it's possible for that closed descriptor to be re-opened again (e.g. by a signal handler), so unless we are willing to ignore that I'm not sure what to do. I suppose we could drop the fd on the first POLLNVAL for the duration of that particular loop, but then reinstate it before restarting the loop after the next user input. Or something more complicated where we drop it for only one call to poll() that has an artificial timeout to limit how long it can be before we discover that the fd is valid again. I don't think we want to go so far as to make it an error to pass a closed fd to zle -F ... and that wouldn't help in this case anyway?