From: ludo@gnu.org (Ludovic Courtès)
To: Neil Jerram <neil@ossau.uklinux.net>
Cc: Ken Raeburn <raeburn@raeburn.org>, guile-devel@gnu.org
Subject: Re: Bug #27457 (“Threads, mutexes, and critical sections”)
Date: Thu, 01 Oct 2009 19:21:08 +0200 [thread overview]
Message-ID: <87ocorni7v.fsf@gnu.org> (raw)
In-Reply-To: <87tyykw3lm.fsf@ossau.uklinux.net> (Neil Jerram's message of "Wed, 30 Sep 2009 21:59:49 +0100")
Hi Neil,
Neil Jerram <neil@ossau.uklinux.net> writes:
> ludo@gnu.org (Ludovic Courtès) writes:
>
>> I should have mentioned this one:
>> http://thread.gmane.org/gmane.comp.programming.garbage-collection.boehmgc/3185 .
>>
>> This is normally somewhat fixed in current BDW-GC CVS, but Guile itself
>> may have troubles of its own dealing with cancellation.
>
> Thanks. I thought already about cancellation, but I couldn't see
> anything in the test program that would do that. Do you know of
> anything in that program, or in BDW-GC, that does a pthread_cancel?
Hmm no, sorry for the confusion. The srfi-18 test this was taken from
did use cancellation, though.
> I've cherry-picked the following branch_release-1-8 fixes.
>
> commit 499c43b03225abb8d3af9087b7630d523b74e13a
> Author: Neil Jerram <neil@ossau.uklinux.net>
> Date: Thu Mar 5 20:03:33 2009 +0000
>
> Avoid throw from critical section, given invalid sigaction call
>
> (This is for a different critical section problem, but which still
> occurs (prior to this commit) in master.)
Good that you noticed it was missing from ‘master’. (BTW ‘signals.test’
should be changed to GPLv3+ and have a ‘define-module’ clause.)
> commit 3009b5d557e1ebfd828fd0de9b1da5abb2f6ec9a
> Author: Neil Jerram <neil@ossau.uklinux.net>
> Date: Tue Mar 10 23:55:31 2009 +0000
>
> Fix spurious `throw from within critical section' errors
>
> (This is the commit that I hope will fix the errors that you're seeing.)
>
> Can you see how the test runs now?
The abort () is apparently never reached with this patch.
It took me some time to understand this:
- if (scm_i_critical_section_level)
+ if (thread->critical_section_level)
{
fprintf (stderr, "continuation invoked from within critical section.\n");
abort ();
Critical sections concern all the threads in guile mode. Thus I would
think that the question “are the threads in a critical section?” cannot
be answered by looking at a per-thread ‘critical_section_level’.
However, it really seems that the intent was really to forbid ‘throw’s
when the *current thread* is holding the critical section mutex, so the
patch is correct but I find the name ‘critical_section_level’ is
slightly misleading.
What do you think?
> Also, can I check my thinking on one other fix, and how it
> interacts with BDW-GC?
>
> commit 2bfcaf2605f8366d8c708c148bde5313b88497e0
> Author: Neil Jerram <neil@ossau.uklinux.net>
> Date: Wed Mar 4 23:45:11 2009 +0000
>
> Lock ordering: don't allocate when in critical section (scm_sigaction_for_thread)
>
> With BDW-GC I believe that allocation in a critical section is no longer
> a problem, specifically because
>
> - the stop-the-world mechanism uses signals and sigsuspend - whereas
> Guile GC used mutexes - and hence there are no concerns about lock
> ordering
>
> - it doesn't matter if there are threads waiting for the critical
> section when a GC happens, because the signal mechanism will still
> interrupt them.
>
> Is that right?
Yes.
BTW, rest assured: thanks to libgc we won’t get any Helgrind report!
:-)
Thanks,
Ludo’.
next prev parent reply other threads:[~2009-10-01 17:21 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-10 19:41 i guess we're frozen & stuff Andy Wingo
2009-08-10 21:08 ` Mike Gran
2009-08-10 21:16 ` Andy Wingo
2009-08-10 21:37 ` Ludovic Courtès
2009-08-11 11:34 ` Greg Troxel
2009-08-11 13:59 ` Ken Raeburn
2009-08-11 14:45 ` Ken Raeburn
2009-08-11 15:36 ` Ludovic Courtès
2009-08-11 15:50 ` Ken Raeburn
2009-08-12 22:42 ` Andy Wingo
2009-08-11 15:34 ` Ludovic Courtès
2009-08-12 22:41 ` Andy Wingo
2009-09-16 19:00 ` Andy Wingo
2009-09-25 21:59 ` Ken Raeburn
2009-09-26 15:45 ` Mike Gran
2009-09-26 22:36 ` Ken Raeburn
2009-09-26 23:11 ` Mike Gran
2009-09-26 21:02 ` Ludovic Courtès
2009-09-26 22:26 ` Ken Raeburn
2009-09-27 9:10 ` Ludovic Courtès
2009-09-27 10:01 ` Ken Raeburn
2009-09-28 7:39 ` Ludovic Courtès
2009-09-28 17:22 ` Neil Jerram
2009-09-28 18:48 ` Ludovic Courtès
2009-09-28 22:42 ` Neil Jerram
2009-09-28 23:21 ` Bug #27457 (“Threads, mutexes, and critical sections”) Ludovic Courtès
2009-09-30 20:59 ` (no subject) Neil Jerram
2009-10-01 17:21 ` Ludovic Courtès [this message]
2009-10-01 21:05 ` Neil Jerram
2009-10-01 19:45 ` Bug #27457 (“Threads, mutexes, and critical sections”) Ken Raeburn
2009-10-01 20:44 ` (no subject) Neil Jerram
2009-09-28 23:27 ` i guess we're frozen & stuff Ken Raeburn
2009-09-28 23:08 ` Ken Raeburn
2009-08-26 22:18 ` Neil Jerram
2009-08-11 12:29 ` Greg Troxel
2009-08-11 15:48 ` Mike Gran
2009-08-11 15:54 ` Ludovic Courtès
2009-08-11 16:13 ` Mike Gran
2009-08-11 17:01 ` Ludovic Courtès
2009-08-11 17:49 ` Mike Gran
2009-08-11 17:04 ` Greg Troxel
2009-08-11 18:14 ` Ken Raeburn
2009-08-11 20:34 ` Ludovic Courtès
2009-08-11 21:58 ` Greg Troxel
2009-08-11 22:46 ` Ludovic Courtès
2009-08-12 13:08 ` Greg Troxel
2009-08-12 14:38 ` Ludovic Courtès
2009-08-12 16:36 ` Greg Troxel
2009-08-11 18:15 ` Ludovic Courtès
2009-08-11 18:17 ` Greg Troxel
2009-08-11 20:26 ` Ludovic Courtès
2009-08-11 22:07 ` Greg Troxel
2009-08-11 17:24 ` Greg Troxel
2009-08-11 19:10 ` i18n issues on NetBSD Ludovic Courtès
2009-08-11 22:05 ` Greg Troxel
2009-08-11 22:58 ` Ludovic Courtès
2009-08-11 17:46 ` i guess we're frozen & stuff Juhani Viheräkoski
2009-08-11 18:01 ` Mike Gran
2009-08-11 20:31 ` Ludovic Courtès
2009-08-11 13:27 ` Greg Troxel
2009-08-11 13:39 ` unsigned char confusion Greg Troxel
2009-08-11 15:23 ` Mike Gran
2009-08-11 17:05 ` i guess we're frozen & stuff Ken Raeburn
2009-08-11 20:27 ` Ludovic Courtès
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
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ocorni7v.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=guile-devel@gnu.org \
--cc=neil@ossau.uklinux.net \
--cc=raeburn@raeburn.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.
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 read-only IMAP folder(s) and NNTP newsgroup(s).