On Tue, Feb 21, 2017 at 3:18 PM, Florian Mayer <mayerflor...@me.com> wrote:

> The following code assumes the lock to be in state not-taken before the
> snippet runs.
>
> echo foo  | tee \
>     >(mutex --lock; echo before; cat; echo after; mutex --unlock) \
>     >(mutex --lock; echo foobar; mutex --unlock) \
>     > /dev/null | cat
>
> for mutex --lock I use a tool which I wrote myself. Since I created this
> tool, there is a small chance that an error inside that program is the
> cause for my problem, but that's rather unlikely. The same code works in
> zsh without a problem.
>
> Now, if the line runs, it sometimes produces the output
>
> before
> foo
> after
> foobar
>
> or
>
> foobar
> before
> foo
> after
>
> just as one would expect. However, the code occasionally just deadlocks.
> I already found out that deadlocks only occur if I try to read from stdin
> in one of the two >()-blocks.
>
> How could I try to debug this?
> Has this something to to with how the bash resumes it's work after being
> suspended?
> The only reason I can think of is that somehow cat never exits. Do you
> think that's a reasonable guess?
> And, moreover, cat that even happen?
>
> Like I said, the exact same code works in zsh out of the box without any
> issues.


It's not clear to me why one process should run before the other.
The calls to "mutex --lock" can run in parallel the kernel choose one.

Reply via email to