lkml.org 
[lkml]   [2001]   [Apr]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: pthreads & fork & execve
    Hi.

    On Mon, Apr 02, 2001 at 09:54:25AM -0300, Gustavo Niemeyer wrote:
    > Hi Richard! Hi Dennis!
    >
    > > I tracked this down to a corrupt jumptable somewhere in the pthreads
    > > part of the libc (didnt have the source handy at that time, though). So
    > > I think this is a libc bug (version does not matter) - I even did a
    > > followup to a similar bug in the libc gnats database (I think I should
    > > have opened a new one, though...). But I failed to construct a "simple"
    > > testcase showing the bug (We use rather large amount of threads and
    > > in one or two doing popen() calls - or handcrafted fork() && execv(),
    > > the SIGSEGV is during fork()).
    >
    > We're going trough two similar problems here. One is KDE, and the other
    > is Linuxconf. Linuxconf is core dumping on a module when it is linked
    > with pthread and dlopen()'ed with RTLD_GLOBAL. We must reduce one of
    > them to a testcase.
    >
    > Btw, both are mainly C++ programs. Is your software written in C++?
    >
    > > I stopped trying to find out what is going on as this feature is not
    > > essential (but maybe useful in the future). So I suggest you build a
    > > libc from source with debugging on and trace it down to the actual
    > > libc problem - or better try to isolate a simple testcase.

    People making Apache 1.3.X modules have a problem too. They have to
    rebuilt Apache and add -lpthread if any modules uses threads.

    The following small program illustrates this. The program, main-wot,
    crashes - the other, main-wt, doesn't.

    [snip] sub.c:
    int sub(void) { return 1; }

    [snip] main.c:

    #include <stdio.h>
    #include <stdlib.h>
    #include <dlfcn.h>

    int main(int argc, char **argv)
    {
    void *h = dlopen ("./sub.so", RTLD_NOW|RTLD_GLOBAL);
    if (!h)
    {
    printf ("dlopen failed\n");
    exit (1);
    }
    gethostbyname("slashdot.org");
    dlclose (h);
    exit (0);
    }

    [snip] Makefile
    all: sub.so main-wt main-wot

    sub.so: sub.c
    gcc -D_REENTRANT -shared sub.c -o sub.so -lpthread
    main-wt: main.c
    gcc main.c -o main-wt -ldl -lpthread
    main-wot: main.c
    gcc main.c -o main-wot -ldl
    [end]

    Cheers,
    Adam

    > We'll probably do this here...
    >
    > > I like to hear from the results :)
    >
    > Please, let me know as well! :-)
    >
    > Thanks!!
    >
    > --
    > Gustavo Niemeyer
    >
    > [ 2AAC 7928 0FBF 0299 5EB5 60E2 2253 B29A 6664 3A0C ]
    > -
    > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    > the body of a message to majordomo@vger.kernel.org
    > More majordomo info at http://vger.kernel.org/majordomo-info.html
    > Please read the FAQ at http://www.tux.org/lkml/

    --
    Adam Dickmeiss mailto:adam@indexdata.dk http://www.indexdata.dk
    Index Data T: +45 33410100 Mob.: 212 212 66
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:22    [W:0.025 / U:62.212 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site