guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: wip-threads-and-fork


From: Andy Wingo
Subject: Re: wip-threads-and-fork
Date: Fri, 24 Feb 2012 11:21:41 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux)

On Fri 24 Feb 2012 04:00, Nala Ginrut <address@hidden> writes:

> I think I could use pipes to handle some sub-process rather than do it
> with fork manually. But I must create a daemon, it can't avoid to use
> fork, will this circumstance cause problems if I use threads after it?

I just pushed a patch like this:

    --- a/libguile/posix.c
    +++ b/libguile/posix.c
    @@ -1,4 +1,4 @@
    -/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2003, 2004, 
2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
    +/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2003, 2004, 
2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc
      * 
      * This library is free software; you can redistribute it and/or
      * modify it under the terms of the GNU Lesser General Public License
    @@ -1248,6 +1248,18 @@ SCM_DEFINE (scm_fork, "primitive-fork", 0, 0, 0,
     #define FUNC_NAME s_scm_fork
     {
       int pid;
    +  if (scm_ilength (scm_all_threads ()) != 1)
    +    /* Other threads may be holding on to resources that Guile needs --
    +       it is not safe to permit one thread to fork while others are
    +       running.
    +
    +       In addition, POSIX clearly specifies that if a multi-threaded
    +       program forks, the child must only call functions that are
    +       async-signal-safe.  We can't guarantee that in general.  The best
    +       we can do is to allow forking only very early, before any call to
    +       sigaction spawns the signal-handling thread.  */
    +    SCM_MISC_ERROR ("attempt to fork while multiple threads are running",
    +                    SCM_EOL);
       pid = fork ();
       if (pid == -1)
         SCM_SYSERROR;

What do you think?

Andy
-- 
http://wingolog.org/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]