Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: strange behavior



On 2011-01-28 07:49:15 -0800, Bart Schaefer wrote:
> I forget whether we covered this before, but does {svn "$@"} ever
> fork as part of its execution?

Yes (for SSH connection, and the ssh script can start a SSH master
connection, which will still run in background after svn terminates,
and that's why I needed the svnwrapper:term trick in my script).

> There has to be some kind of race condition here.  2>>(filter) runs
> filter in the background, so if something behind svn also runs as an
> separate process, it could be possible for the filter to exit and
> close it's stdin (thereby closing everything else's stdder) before
> operating-system-level exit-time buffer-flushing has finished.

Yes, this happens, but I don't see why this could make the script
terminate with a broken pipe. I recall the whole script:

filter()
{
  unset brpipe
  while true
  do
    unset line timeout
    while read -r $timeout -k -u 0 ch
    do
      line="$line$ch"
      [[ $ch = $'\012' ]] && break
      timeout=(-t 0.1)
    done
    case $line in
      svnwrapper:term$'\012')
        break ;;
      *Broken\ pipe$'\012') brpipe=1 ;;
      ?*) printf "%s" "$line" >&2 ;;
      *) break ;;  # empty line (end of file) - parent has died?
    esac
  done
  # The "sleep 5" is there to avoid a rare race condition (it occurred
  # once): make sure the parent process receives the PIPE signal before
  # the filter process terminates (which can yield a SIGPIPE in svn).
  [[ -z $brpipe ]] || { kill -PIPE $$; sleep 5 }
}

{ svn "$@"; st=$?; echo "svnwrapper:term" >&2 } 2>>(filter)
exit $st

Because of the "while true" loop, filter should still run after svn
terminates.

Note that when I obtained the "zsh: exit 141", the svn output wasn't
redirected, so that a "Broken pipe" message from svn was not possible.

> Hmm, another thought ... maybe the "zsh: exit 141" is coming from
> the shell's exit-time handling of the "filter" program, rather than
> from svn.  I've lost enough context here that I don't recall whether
> that was previously ruled out too.

What do you mean here?

-- 
Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <http://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)



Messages sorted by: Reverse Date, Date, Thread, Author