On Tue, Feb 21, 2017 at 4:00 PM, Pierre Gaston <pierre.gas...@gmail.com>
wrote:

>
>
> 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.
>
 ah sorry I read too fast your example, you are expecting that.

Reply via email to