zsh-workers
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-workers@zsh.org
Subject: Re: Shell job structure
Date: Thu, 24 Oct 2013 22:02:14 -0700	[thread overview]
Message-ID: <131024220214.ZM8256@torch.brasslantern.com> (raw)
In-Reply-To: <20131008214437.41dc396a@pws-pc.ntlworld.com>

Just to tie this off, as we now have this mostly addressed:

On Oct 8,  9:44pm, Peter Stephenson wrote:
} Subject: Shell job structure
}
} On Mon, 07 Oct 2013 07:40:49 -0700
} Bart Schaefer <schaefer@brasslantern.com> wrote:
} > - because external jobs can exit and be reaped in arbitrary order, even
} >   in a pipeline, the job table is used to keep track of which position
} >   in the array to update

More specifically:  The "procs" linked list in a job table entry keeps
track of the array positions.  The complication is ..

} > - jobs that run in the current shell don't have a complete job table entry

... and the "incomplete" part is that there *is* a job table entry, but
the current shell task doesn't have an entry in the "procs" list.

} >   [cf. all the gyrations to suspend/background a loop] and aren't "reaped"
} >   in the same code path as external jobs, so the wrong array position (or
} >   none at all) may get updated

Because zsh "forks to the left" to keep the tail of the pipeline in the
current shell, the status of the current shell task has to be added to
the end of $pipestatus (internally "pipestats"), which means an accurate
count of the number of other processes in the pipeline is essential.

} > - the incorrect update depends on whether the external job exited AND got
} >   reaped before the current-shell job has completed, because of the way
} >   reaping updates the job table, so correctness is unpredictable

This has been fixed by moving the update of pipestats to the point where
the job table entry is deleted, instead of trying to do it at the point
where individual processes have their status updated.

} > - complex commands "in the current shell" may have external subjobs that
} >   need a separate pipestatus (this applies only at end of a pipeline)

I believe this has also been worked around by the above, but one thing
we haven't tested yet is what value $pipestatus has *inside* a loop.

} The job table would become a list of top-level jobs, while the job
} structure would have pointers to nested jobs.

As I mentioned elsewhere, the procs list and "other" pointer into the
job table serve this function.

It still might be done more cleanly, but at least we avoided a full
rewrite for now.


  reply	other threads:[~2013-10-25  5:02 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CADv1Z=pM7H4Xg9+GyWd4zw0cv0mXfbJvqip6vc7e_yrXRN=1sg@mail.gmail.com>
     [not found] ` <20131005223159.25fea6a0@pws-pc.ntlworld.com>
2013-10-07  0:36   ` No pipefail option? Bart Schaefer
2013-10-07  9:25     ` Peter Stephenson
2013-10-07 14:40       ` Bart Schaefer
2013-10-08 20:44         ` Shell job structure Peter Stephenson
2013-10-25  5:02           ` Bart Schaefer [this message]
2013-10-25 10:00             ` Peter Stephenson
2013-10-25 15:13               ` Bart Schaefer
2013-10-25 15:21                 ` Peter Stephenson
2013-10-25 17:04                   ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=131024220214.ZM8256@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).