unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
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’.




  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).