* [ltt-dev] [UST PATCH] Fix the once in a while freeze of the tests
@ 2011-02-18 21:36 Yannick Brosseau
2011-02-20 0:57 ` Mathieu Desnoyers
0 siblings, 1 reply; 5+ messages in thread
From: Yannick Brosseau @ 2011-02-18 21:36 UTC (permalink / raw)
Sometimes, the thread in the read function would lock the pipe so the
setlinebuf would freeze on it. Set the linebuf before we create the
thread to fix this deadlock
Signed-off-by: Yannick Brosseau <yannick.brosseau at gmail.com>
---
tests/tap.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/tests/tap.c b/tests/tap.c
index a54fd17..4bb695e 100644
--- a/tests/tap.c
+++ b/tests/tap.c
@@ -58,6 +58,9 @@ static void tap_comment_stdout(void)
goto close_pipe;
}
+ /* Set it before we create the reading thread */
+ setlinebuf(pipe_r_file);
+
stdout_fileno = fileno(stdout);
if (stdout_fileno < 0) {
perror("# Couldn't get fileno for stdout!?");
@@ -112,7 +115,7 @@ static void tap_comment_stdout(void)
setlinebuf(stdout);
setlinebuf(stderr);
- setlinebuf(pipe_r_file);
+
return;
--
1.7.2.3
^ permalink raw reply [flat|nested] 5+ messages in thread
* [ltt-dev] [UST PATCH] Fix the once in a while freeze of the tests
2011-02-18 21:36 [ltt-dev] [UST PATCH] Fix the once in a while freeze of the tests Yannick Brosseau
@ 2011-02-20 0:57 ` Mathieu Desnoyers
2011-02-20 15:17 ` Mathieu Desnoyers
[not found] ` <BLU0-SMTP101D3A13834942CDAF72E4196D60@phx.gbl>
0 siblings, 2 replies; 5+ messages in thread
From: Mathieu Desnoyers @ 2011-02-20 0:57 UTC (permalink / raw)
* Yannick Brosseau (yannick.brosseau at gmail.com) wrote:
> Sometimes, the thread in the read function would lock the pipe so the
> setlinebuf would freeze on it. Set the linebuf before we create the
> thread to fix this deadlock
Can you update the description to show which locks are involved in this
deadlock scenario ? E.g.
- CPU A - CPU B
function function
lock A (taken) lock B (taken)
lock B (waiting)
lock A (waiting) <-- deadlock
Or show it with the lock chain dependency analysis. But it's important
to have this information along with this kind of fix.
Thanks,
Mathieu
>
> Signed-off-by: Yannick Brosseau <yannick.brosseau at gmail.com>
> ---
> tests/tap.c | 5 ++++-
> 1 files changed, 4 insertions(+), 1 deletions(-)
>
> diff --git a/tests/tap.c b/tests/tap.c
> index a54fd17..4bb695e 100644
> --- a/tests/tap.c
> +++ b/tests/tap.c
> @@ -58,6 +58,9 @@ static void tap_comment_stdout(void)
> goto close_pipe;
> }
>
> + /* Set it before we create the reading thread */
> + setlinebuf(pipe_r_file);
> +
> stdout_fileno = fileno(stdout);
> if (stdout_fileno < 0) {
> perror("# Couldn't get fileno for stdout!?");
> @@ -112,7 +115,7 @@ static void tap_comment_stdout(void)
>
> setlinebuf(stdout);
> setlinebuf(stderr);
> - setlinebuf(pipe_r_file);
> +
>
> return;
>
> --
> 1.7.2.3
>
>
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
>
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* [ltt-dev] [UST PATCH] Fix the once in a while freeze of the tests
2011-02-20 0:57 ` Mathieu Desnoyers
@ 2011-02-20 15:17 ` Mathieu Desnoyers
[not found] ` <BLU0-SMTP101D3A13834942CDAF72E4196D60@phx.gbl>
1 sibling, 0 replies; 5+ messages in thread
From: Mathieu Desnoyers @ 2011-02-20 15:17 UTC (permalink / raw)
* Mathieu Desnoyers (compudj at krystal.dyndns.org) wrote:
> * Yannick Brosseau (yannick.brosseau at gmail.com) wrote:
> > Sometimes, the thread in the read function would lock the pipe so the
> > setlinebuf would freeze on it. Set the linebuf before we create the
> > thread to fix this deadlock
>
> Can you update the description to show which locks are involved in this
> deadlock scenario ? E.g.
>
> - CPU A - CPU B
>
> function function
> lock A (taken) lock B (taken)
> lock B (waiting)
> lock A (waiting) <-- deadlock
>
> Or show it with the lock chain dependency analysis. But it's important
> to have this information along with this kind of fix.
Hrm, ok I looked at tap.c, and it's not a deadlock at all: it's rather
that the _tap_comment_stdout thread can start using pipe_r_file when it
is still uninitialized.
I'll update the comment and pull the patch.
Thanks,
Mathieu
>
> Thanks,
>
> Mathieu
> >
> > Signed-off-by: Yannick Brosseau <yannick.brosseau at gmail.com>
> > ---
> > tests/tap.c | 5 ++++-
> > 1 files changed, 4 insertions(+), 1 deletions(-)
> >
> > diff --git a/tests/tap.c b/tests/tap.c
> > index a54fd17..4bb695e 100644
> > --- a/tests/tap.c
> > +++ b/tests/tap.c
> > @@ -58,6 +58,9 @@ static void tap_comment_stdout(void)
> > goto close_pipe;
> > }
> >
> > + /* Set it before we create the reading thread */
> > + setlinebuf(pipe_r_file);
> > +
> > stdout_fileno = fileno(stdout);
> > if (stdout_fileno < 0) {
> > perror("# Couldn't get fileno for stdout!?");
> > @@ -112,7 +115,7 @@ static void tap_comment_stdout(void)
> >
> > setlinebuf(stdout);
> > setlinebuf(stderr);
> > - setlinebuf(pipe_r_file);
> > +
> >
> > return;
> >
> > --
> > 1.7.2.3
> >
> >
> > _______________________________________________
> > ltt-dev mailing list
> > ltt-dev at lists.casi.polymtl.ca
> > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> >
>
> --
> Mathieu Desnoyers
> Operating System Efficiency R&D Consultant
> EfficiOS Inc.
> http://www.efficios.com
>
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
>
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* [ltt-dev] [UST PATCH] Fix the once in a while freeze of the tests
[not found] ` <BLU0-SMTP101D3A13834942CDAF72E4196D60@phx.gbl>
@ 2011-02-20 15:45 ` Yannick Brosseau
2011-02-20 18:40 ` Mathieu Desnoyers
0 siblings, 1 reply; 5+ messages in thread
From: Yannick Brosseau @ 2011-02-20 15:45 UTC (permalink / raw)
On 2011-02-20 10:17, Mathieu Desnoyers wrote:
> * Mathieu Desnoyers (compudj at krystal.dyndns.org) wrote:
>
>> * Yannick Brosseau (yannick.brosseau at gmail.com) wrote:
>>
>>> Sometimes, the thread in the read function would lock the pipe so the
>>> setlinebuf would freeze on it. Set the linebuf before we create the
>>> thread to fix this deadlock
>>>
>> Can you update the description to show which locks are involved in this
>> deadlock scenario ? E.g.
>>
>> - CPU A - CPU B
>>
>> function function
>> lock A (taken) lock B (taken)
>> lock B (waiting)
>> lock A (waiting) <-- deadlock
>>
>> Or show it with the lock chain dependency analysis. But it's important
>> to have this information along with this kind of fix.
>>
> Hrm, ok I looked at tap.c, and it's not a deadlock at all: it's rather
> that the _tap_comment_stdout thread can start using pipe_r_file when it
> is still uninitialized.
>
>
I found a lock in the calls to fgets and setlinebuf, deep in the glibc.
If what you says is true, the fix I've proposed is not right. Its the
pthread_create that should be moved.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [ltt-dev] [UST PATCH] Fix the once in a while freeze of the tests
2011-02-20 15:45 ` Yannick Brosseau
@ 2011-02-20 18:40 ` Mathieu Desnoyers
0 siblings, 0 replies; 5+ messages in thread
From: Mathieu Desnoyers @ 2011-02-20 18:40 UTC (permalink / raw)
* Yannick Brosseau (yannick.brosseau at gmail.com) wrote:
> On 2011-02-20 10:17, Mathieu Desnoyers wrote:
> > * Mathieu Desnoyers (compudj at krystal.dyndns.org) wrote:
> >
> >> * Yannick Brosseau (yannick.brosseau at gmail.com) wrote:
> >>
> >>> Sometimes, the thread in the read function would lock the pipe so the
> >>> setlinebuf would freeze on it. Set the linebuf before we create the
> >>> thread to fix this deadlock
> >>>
> >> Can you update the description to show which locks are involved in this
> >> deadlock scenario ? E.g.
> >>
> >> - CPU A - CPU B
> >>
> >> function function
> >> lock A (taken) lock B (taken)
> >> lock B (waiting)
> >> lock A (waiting) <-- deadlock
> >>
> >> Or show it with the lock chain dependency analysis. But it's important
> >> to have this information along with this kind of fix.
> >>
> > Hrm, ok I looked at tap.c, and it's not a deadlock at all: it's rather
> > that the _tap_comment_stdout thread can start using pipe_r_file when it
> > is still uninitialized.
> >
> >
> I found a lock in the calls to fgets and setlinebuf, deep in the glibc.
> If what you says is true, the fix I've proposed is not right. Its the
> pthread_create that should be moved.
>
I don't understand. It should only be the relative order of init vs
pthread_create (the user of this structure) that matters, no ?
Mathieu
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-02-20 18:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-18 21:36 [ltt-dev] [UST PATCH] Fix the once in a while freeze of the tests Yannick Brosseau
2011-02-20 0:57 ` Mathieu Desnoyers
2011-02-20 15:17 ` Mathieu Desnoyers
[not found] ` <BLU0-SMTP101D3A13834942CDAF72E4196D60@phx.gbl>
2011-02-20 15:45 ` Yannick Brosseau
2011-02-20 18:40 ` Mathieu Desnoyers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox