Hi Dmitrij,

> Apparently I have similar problem with surf:

You could try to workaround by launching surf with:

$ LD_PRELOAD=/usr/local/lib/gio/modules/libgiognutls.so surf

For vimb, it works.



About the problem, my last "minimal c-file" looks like:

/*
 * cc test.c -o test `pkg-config -cflags -libs glib-2.0 gio-2.0`
 */
#include <stdio.h>
#include <stdlib.h>

#include <glib.h>
#include <gio/gio.h>

int main(int argc, char *argv) {
        //g_module_open("/usr/local/lib/gio/modules/libgiognutls.so", 
G_MODULE_BIND_MASK);
        g_tls_backend_get_default ();
        fork();

        return(EXIT_SUCCESS);
}

The g_module_open function is called near the pthread_atfork in
g_tls_backend_get_default.

But:
 - only with it (g_module_open + fork): no problem
 - with g_module_open+g_tls_backend_get_default+fork: no problem

So there is something between the two...


the g_module_open (in g_tls_backend_get_default) will call:
_g_module_open (file_name=0x15887c4669c0 
"/usr/local/lib/gio/modules/libgiognutls.so", bind_lazy=1, bind_local=1) at 
gmodule-dl.c:97
which call dlopen().

the pthread_atfork seems (but not sure) to be part of dlopen in the
pthread case.

-- 
Sébastien Marie

Reply via email to