Richard Oudkerk added the comment:

I finally have a gdb backtrace of a stuck child (started using os.fork() not 
multiprocessing):

#1  0xb76194da in ?? () from /lib/libc.so.6
#2  0xb6d59755 in ?? ()
   from 
/var/lib/buildslave/custom.murray-gentoo/build/build/lib.linux-i686-3.4-pydebug/_ssl.cpython-34dm.so
#3  0xb6d628f0 in _fini ()
   from 
/var/lib/buildslave/custom.murray-gentoo/build/build/lib.linux-i686-3.4-pydebug/_ssl.cpython-34dm.so
#4  0xb770859b in ?? () from /lib/ld-linux.so.2
#5  0xb75502c7 in ?? () from /lib/libc.so.6
#6  0xb7550330 in exit () from /lib/libc.so.6
#7  0xb558f244 in ?? () from /lib/libncursesw.so.5
#8  0xb76e9f38 in fork () from /lib/libpthread.so.0
---Type <return> to continue, or q <return> to quit---#9  0x08085f89 in 
posix_fork (self=0xb74da374, noargs=0x0)
    at ./Modules/posixmodule.c:5315
...

It looks as though fork() is indirectly calling something in 
_ssl.cpython-34dm.so which is not completing.  So I guess this is 
pthread_atfork() related.  But the child argument passed to pthread_atfork() 
should be NULL, so I don't really understand this:

static int
PySSL_RAND_atfork(void)
{
    static int registered = 0;
    int retval;

    if (registered)
        return 0;

    retval = pthread_atfork(NULL,                     /* prepare */
                            PySSL_RAND_atfork_parent, /* parent */
                            NULL);                    /* child */
    if (retval != 0) {
        PyErr_SetFromErrno(PyExc_OSError);
        return -1;
    }
    registered = 1;
    return 0;
}

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue19227>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to