diff -r 7f4e0c869c2e Modules/_ssl.c --- a/Modules/_ssl.c Sun Oct 20 13:23:03 2013 +0200 +++ b/Modules/_ssl.c Sun Oct 20 19:45:24 2013 +0200 @@ -2987,6 +2987,8 @@ RAND_add((unsigned char *)&seed, sizeof(seed), 0.0); } +static void _unlock_ssl_threads(void); + static int PySSL_RAND_atfork(void) { @@ -2998,7 +3000,7 @@ retval = pthread_atfork(NULL, /* prepare */ PySSL_RAND_atfork_parent, /* parent */ - NULL); /* child */ + _unlock_ssl_threads); /* child */ if (retval != 0) { PyErr_SetFromErrno(PyExc_OSError); return -1; @@ -3285,6 +3287,16 @@ return 1; } +static void _unlock_ssl_threads(void) { + unsigned int i; + if (_ssl_locks != NULL) { + for (i = 0; i < _ssl_locks_count; i++) { + PyThread_release_lock(_ssl_locks[i]); + } + } +} + + #endif /* def HAVE_THREAD */ PyDoc_STRVAR(module_doc,