From: Derek Upham <sand@blarg.net>
To: Andy Wingo <wingo@pobox.com>
Cc: guile-devel@gnu.org
Subject: Re: Cygwin port of Guile 2.2
Date: Mon, 17 Apr 2017 08:05:35 -0700 [thread overview]
Message-ID: <87ziffcbwg.fsf@priss.frightenedpiglet.com> (raw)
In-Reply-To: <878tmz7945.fsf@pobox.com>
Andy Wingo <wingo@pobox.com> writes:
>> I have found that what actually hangs after a fork are the mutexes
>> supporting the threads: they are kernel-level resources, referenced by
>> ID, and end up being shared between parent and child.
>
> Which ones, precisely?
GDB shows the hanging child process waiting on a mutex down in the
BDW-GC garbage collection library. The parent has the mutex, and is
blocked waiting to read data from the child.
>> I don’t think there’s any safe way to restore the finalizer thread and
>> support SCSH-style (begin ...) process forms. Shutting down the
>> finalizer thread is the best we can do.
>
> The finalizer thread should be restored as needed, the next time GC
> calls notify_finalizers_to_run.
If you have two, initially identical Guile processes running, each of
which depend on the same external resource needing finalization, how do
you control cleanup in a way that’s safe for both processes? If either
the parent or the child finalizes, the other process may still be
depending on the external resource. The correct policy seems to be
“Don’t use finalizers with primitive-fork” in the same way that we say
“Don’t use threads with primitive-fork”. It’s a problem with
(begin ...) process forms, not with situations where the process execs
another program.
> I think also that if you are most interested in a system in which
> primitive-fork plays a large role, then probably you want a Guile
> without threads (including the GC mark threads). Threads + fork is not
> a recipe for success :)
Understood. However, saying “primitive-fork requires a separate,
threadless Guile installation” would be very limiting. I’d like to be
in a position where Guile will manage any threads that it creates
under the hood; then it’s up to the program owner to guarantee that
there are no other threads running at fork time. Right now the
under-the-hood threads appear to be:
1. The finalizer thread.
2. The signal delivery thread.
(If you can think of any others, let me know.)
For SCSH-style process forms, this comes up when trying to implement
SCSH’s “early” child process auto-reap mechanism (section 3.4.1 in the
SCSH manual). The “early” policy works by setting up a handler for
SIGCHLD. We are guaranteed to have the signal delivery thread in that
situation. (The “late” policy hooks into the garbage collector, so it
avoids this problem; it can have pathological edge cases for
long-running programs, however.)
Derek
--
Derek Upham
sand@blarg.net
next prev parent reply other threads:[~2017-04-17 15:05 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-04 16:45 Cygwin port of Guile 2.2 Mike Gran
2017-04-04 17:03 ` Eli Zaretskii
2017-04-14 8:35 ` Andy Wingo
2017-04-14 13:41 ` Derek Upham
2017-04-17 8:04 ` Andy Wingo
2017-04-17 15:05 ` Derek Upham [this message]
2017-05-01 20:48 ` Derek Upham
2017-05-02 19:35 ` Andy Wingo
2017-05-03 3:18 ` Derek Upham
2017-05-03 9:24 ` Andy Wingo
2017-05-03 9:39 ` szgyg
2017-05-03 14:21 ` Derek Upham
2017-05-09 19:08 ` Andy Wingo
2017-05-12 14:13 ` Derek Upham
2017-05-15 20:06 ` Andy Wingo
2017-05-04 5:21 ` zv
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=87ziffcbwg.fsf@priss.frightenedpiglet.com \
--to=sand@blarg.net \
--cc=guile-devel@gnu.org \
--cc=wingo@pobox.com \
/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).