Skip to content
This repository has been archived by the owner on Jul 13, 2020. It is now read-only.

Segmentation faults on 64-bit threaded perl when doing $thread->join #3

Open
pdcawley opened this issue Mar 21, 2014 · 1 comment
Open

Comments

@pdcawley
Copy link

We've been experiencing some problems with Kavorka not being thread safe on our 64-bit threaded perl. Eventually we narrowed it down to being a problem with Devel::Pragma, using the following test code:

use strict;
use warnings;
use Test::More;

use Config;
BEGIN {
    plan skip_all => "your perl does not support ithreads"
        unless $Config{useithreads};
};

use threads;

{
    package ThreadedExample;
    use Devel::Pragma;
}

my $subref = sub {
    my $id = shift;
    note("id:$id");
    return $id;
};

my @threads;
my @idents = qw/bar1 bar2 bar3 bar4 bar5 bar6/;
foreach my $foo_id (@idents)
{
    push @threads, threads->create($subref, $foo_id);
}

my @results;
for my $thread (@threads) {
    note("joining thread $thread");
    push @results, $thread->join;
}

is_deeply(
    [ sort @results ],
    [ sort @idents ],
    'expected return values',
);

done_testing;

It doesn't blow up on a 32 bit threaded perl, apparently, and if we roll back to Devel::Pragma 0.54, it's fine too.

@pdcawley
Copy link
Author

Further to this, git bisect lays the blame at commit 974553d

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant