simple threads::shared code causes crash, any ideas?

Discussion in 'Perl Misc' started by sgromoll, Sep 9, 2005.

  1. sgromoll

    sgromoll Guest

    Hi-

    I've written a multithreaded sockets server where the main thread
    receives a tcp connection, forks a thread to handle it, detaches it,
    and waits for the next connection. I'm experiencing a segmentation
    fault which i think is related to calling lock() on a shared variable.

    I've written a very small test script (see below) which crashes
    consistantly in a similar way. It crashes with the following error:

    thread failed to start: panic: MUTEX_LOCK (22) [shared.xs:107] at
    ../job_manager line 1045, <GEN817> line 1.
    Segmentation fault

    Does anyone have any ideas why the script below crashes?

    (I'm running perl v5.8.4 on debian testing. I have included the output
    of uname and perl -V below the script)

    Thanks-

    -stefan


    ----------
    #!/usr/bin/perl -w

    use warnings;
    use strict;

    use threads;
    use threads::shared;

    my $var : shared = 0;


    sub go
    {
    lock($var);
    }

    # (my server program crashes (after a fairly long time) when
    # only a few threads are running at a time)
    while(1) {
    my $thr1 = threads->new(\&go);
    # if this detach is removed, the script doesn't seem to crash,
    # and runs until it uses up all the memory on the machine
    $thr1->detach;
    }

    -----------------
    uname -a
    Linux venus 2.4.25 #6 SMP Mon Apr 26 19:14:43 EDT 2004 i686 GNU/Linux

    -----------------
    perl -V:

    Summary of my perl5 (revision 5 version 8 subversion 4) configuration:
    Platform:
    osname=linux, osvers=2.4.27-ti1211,
    archname=i386-linux-thread-multi
    uname='linux kosh 2.4.27-ti1211 #1 sun sep 19 18:17:45 est 2004
    i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
    -Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr
    -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8
    -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
    -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
    -Dsitelib=/usr/local/share/perl/5.8.4
    -Dsitearch=/usr/local/lib/perl/5.8.4 -Dman1dir=/usr/share/man/man1
    -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
    -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl
    -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm
    -Duseshrplib -Dlibperl=libperl.so.5.8.4 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define
    usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
    Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS
    -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE
    -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN
    -fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='3.3.5 (Debian 1:3.3.5-8)',
    gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
    lseeksize=8
    alignbytes=4, prototype=define
    Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.3.2.so, so=so, useshrplib=true,
    libperl=libperl.so.5.8.4
    gnulibc_version='2.3.2'
    Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


    Characteristics of this binary (from libperl):
    Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES
    PERL_IMPLICIT_CONTEXT
    Built under linux
    Compiled at Feb 3 2005 00:32:16
    %ENV:
    PERL5LIB="/usr/local/sw/perl"
    @INC:
    /usr/local/sw/perl
    /etc/perl
    /usr/local/lib/perl/5.8.4
    /usr/local/share/perl/5.8.4
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.8
    /usr/share/perl/5.8
    /usr/local/lib/site_perl
    sgromoll, Sep 9, 2005
    #1
    1. Advertising

  2. sgromoll

    Guest

    "sgromoll" <> wrote:
    >
    > Does anyone have any ideas why the script below crashes?
    >
    > (I'm running perl v5.8.4 on debian testing. I have included the output
    > of uname and perl -V below the script)


    For whatever it is worth, I don't get a crash on 5.8.0 on Redhat
    2.4.21-15.0.3.ELsmp #1 SMP Tue Jun 29 18:04:47 EDT 2004 i686 unknown
    unknown GNU/Linux

    Nor on 5.8.3
    2.6.5-7.97-smp #1 SMP Fri Jul 2 14:21:59 UTC 2004 x86_64 x86_64 x86_64
    GNU/Linux

    Xho


    > ----------
    > #!/usr/bin/perl -w
    >
    > use warnings;
    > use strict;
    >
    > use threads;
    > use threads::shared;
    >
    > my $var : shared = 0;
    >
    > sub go
    > {
    > lock($var);
    > }
    >
    > # (my server program crashes (after a fairly long time) when
    > # only a few threads are running at a time)
    > while(1) {
    > my $thr1 = threads->new(\&go);
    > # if this detach is removed, the script doesn't seem to crash,
    > # and runs until it uses up all the memory on the machine
    > $thr1->detach;
    > }
    >


    --
    -------------------- http://NewsReader.Com/ --------------------
    Usenet Newsgroup Service $9.95/Month 30GB
    , Sep 9, 2005
    #2
    1. Advertising

  3. sgromoll

    sgromoll Guest

    hmmm, i tried this on a few other machines as well, it seems to crash
    on work with some setups and not with others.

    It does not seem to crash (after 10 minutes or so anyway) on:

    (5.8.4) 2.6.10-5-386 #1 i686 GNU/Linux
    (5.8.0) 2.4.21-4.ELsmp #1 SMP i686 i686 i386 GNU/Linux
    and from Xho in his posting below (Xho, did you let these run for a few
    minutes?):
    (5.8.3) 2.6.5-7.97-smp #1 SMP x86_64 x86_64 x86_64 GNU/Linux
    (5.8.0) 2.4.21-15.0.3.ELsmp #1 SMP i686 unknown unknown GNU/Linux

    (I let the 2.6.10 machine run for over 20 minutes)


    but crashes quickly or after a few minutes (and sometimes segfaults on
    Ctrl-C) on:

    (5.8.7) 2.6.8-2-mckinley-smp #1 SMP ia64 GNU/Linux
    (5.8.4) 2.6.8.1.20040829 #1 SMP i686 GNU/Linux
    (5.8.4) 2.4.25 #6 SMP i686 GNU/Linux
    (5.8.4) 2.4.27.20040829 #5 SMP i686 GNU/Linux


    it seems to crash with different errors, depending on what machine I
    run it on. I've received:

    --
    panic: destruct destroyed thread 0@a\uffffl0@l0@ during global
    destruction.
    Segmentation fault
    --
    (in cleanup) panic: destruct destroyed thread 828c0e8 (no reference) at
    ../test.pl line 23.
    panic: MUTEX_DESTROY (16) [threads.xs:152] during global destruction.
    Segmentation fault
    --


    Does anyone have any ideas, or suggestions for further debugging?


    Thanks,

    -stefan





    wrote:
    > "sgromoll" <> wrote:
    > >
    > > Does anyone have any ideas why the script below crashes?
    > >
    > > (I'm running perl v5.8.4 on debian testing. I have included the output
    > > of uname and perl -V below the script)

    >
    > For whatever it is worth, I don't get a crash on 5.8.0 on Redhat
    > 2.4.21-15.0.3.ELsmp #1 SMP Tue Jun 29 18:04:47 EDT 2004 i686 unknown
    > unknown GNU/Linux
    >
    > Nor on 5.8.3
    > 2.6.5-7.97-smp #1 SMP Fri Jul 2 14:21:59 UTC 2004 x86_64 x86_64 x86_64
    > GNU/Linux
    >
    > Xho
    >
    >
    > > ----------
    > > #!/usr/bin/perl -w
    > >
    > > use warnings;
    > > use strict;
    > >
    > > use threads;
    > > use threads::shared;
    > >
    > > my $var : shared = 0;
    > >
    > > sub go
    > > {
    > > lock($var);
    > > }
    > >
    > > # (my server program crashes (after a fairly long time) when
    > > # only a few threads are running at a time)
    > > while(1) {
    > > my $thr1 = threads->new(\&go);
    > > # if this detach is removed, the script doesn't seem to crash,
    > > # and runs until it uses up all the memory on the machine
    > > $thr1->detach;
    > > }
    > >

    >
    > --
    > -------------------- http://NewsReader.Com/ --------------------
    > Usenet Newsgroup Service $9.95/Month 30GB
    sgromoll, Sep 10, 2005
    #3
  4. sgromoll

    Guest

    "sgromoll" <> wrote:
    > hmmm, i tried this on a few other machines as well, it seems to crash
    > on work with some setups and not with others.
    >
    > It does not seem to crash (after 10 minutes or so anyway) on:
    >
    > (5.8.4) 2.6.10-5-386 #1 i686 GNU/Linux
    > (5.8.0) 2.4.21-4.ELsmp #1 SMP i686 i686 i386 GNU/Linux
    > and from Xho in his posting below (Xho, did you let these run for a few
    > minutes?):


    Yep, over an hour.

    > (5.8.3) 2.6.5-7.97-smp #1 SMP x86_64 x86_64 x86_64 GNU/Linux
    > (5.8.0) 2.4.21-15.0.3.ELsmp #1 SMP i686 unknown unknown GNU/Linux




    >
    > (I let the 2.6.10 machine run for over 20 minutes)
    >
    > but crashes quickly or after a few minutes (and sometimes segfaults on
    > Ctrl-C) on:
    >
    > (5.8.7) 2.6.8-2-mckinley-smp #1 SMP ia64 GNU/Linux
    > (5.8.4) 2.6.8.1.20040829 #1 SMP i686 GNU/Linux
    > (5.8.4) 2.4.25 #6 SMP i686 GNU/Linux
    > (5.8.4) 2.4.27.20040829 #5 SMP i686 GNU/Linux
    >
    > it seems to crash with different errors, depending on what machine I
    > run it on. I've received:
    >
    > --
    > panic: destruct destroyed thread 0@a\uffffl0@l0@ during global
    > destruction.
    > Segmentation fault
    > --
    > (in cleanup) panic: destruct destroyed thread 828c0e8 (no reference) at
    > ./test.pl line 23.
    > panic: MUTEX_DESTROY (16) [threads.xs:152] during global destruction.
    > Segmentation fault
    > --
    >
    > Does anyone have any ideas, or suggestions for further debugging?


    There is the potential for something like a fork-bomb here. I can see
    where some machines, given some vaguary of the scheduler, could be spawning
    threads faster than they are ending. Do you know what the maximum number
    of threads in existence at once is, on the machines which are crashing?

    --
    -------------------- http://NewsReader.Com/ --------------------
    Usenet Newsgroup Service $9.95/Month 30GB
    , Sep 10, 2005
    #4
  5. sgromoll

    sgromoll Guest

    I added a print statement with a counter in the main thread, and the
    program crashes after as few as 3 threads have been created (sometimes
    it makes it up to 50 or so). It seems to be more of a timing issue,
    since I originally experienced this problem with my server app, which
    had at most around 10 threads going at a time, and which ran fine for a
    long time before experiencing this problem. I figured that it must
    crash when two threads hit the lock() around the same time, so I wrote
    this test program.

    any other suggestions?

    -stefan
    sgromoll, Sep 12, 2005
    #5
  6. sgromoll

    sgromoll Guest

    I submitted this as a perl bug, bug id #37133.
    sgromoll, Sep 12, 2005
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Edward
    Replies:
    1
    Views:
    552
    =?Utf-8?B?U2NvdHQgU2ltb25z?=
    Oct 14, 2004
  2. =?Utf-8?B?QkQgSm9uZXM=?=

    Hourglass ('wait') cursor causes IE to crash

    =?Utf-8?B?QkQgSm9uZXM=?=, Oct 26, 2004, in forum: ASP .Net
    Replies:
    0
    Views:
    581
    =?Utf-8?B?QkQgSm9uZXM=?=
    Oct 26, 2004
  3. Bytz
    Replies:
    9
    Views:
    558
    Jeff Dillon
    Apr 13, 2006
  4. Marcel Raap

    Xvfb causes iPlanet to crash

    Marcel Raap, Jul 13, 2004, in forum: Java
    Replies:
    0
    Views:
    354
    Marcel Raap
    Jul 13, 2004
  5. Single Stage to Orbit
    Replies:
    5
    Views:
    717
    Single Stage to Orbit
    Jul 28, 2012
Loading...

Share This Page