1 BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
10 # FIXME: this discrepancy is crazy, need to investigate
11 my $mem_needed = ($Config{ptrsize} == 4)
16 if( ! $Config{useithreads} ) {
17 $skipall = 'your perl does not support ithreads';
19 elsif( "$]" < 5.008005 ) {
20 $skipall = 'DBIC does not actively support threads before perl 5.8.5';
22 elsif( $INC{'Devel/Cover.pm'} ) {
23 $skipall = 'Devel::Cover does not work with ithreads yet';
26 ! $ENV{DBICTEST_RUN_ALL_TESTS}
28 require DBICTest::RunMode
30 ! DBICTest::RunMode->is_smoker
32 $skipall = "Test is too expensive (may use up to ${mem_needed}MB of memory), skipping on non-smoker";
39 # without this the can_alloc may very well shoot half of the CI down
40 DBICTest->import(':GlobalLock');
42 unless ( DBICTest::Util::can_alloc_MB($mem_needed) ) {
43 $skipall = "Your system does not have the necessary amount of memory (${mem_needed}MB) for this ridiculous test";
48 print "1..0 # SKIP $skipall\n";
55 use DBIx::Class::_Util 'sigwarn_silencer';
56 use Time::HiRes qw(time sleep);
58 # README: If you set the env var to a number greater than 5,
59 # we will use that many children
60 my $num_children = $ENV{DBICTEST_THREAD_STRESS} || 1;
61 if($num_children !~ /^[0-9]+$/ || $num_children < 5) {
65 my $schema = DBICTest->init_schema(no_deploy => 1);
66 isa_ok ($schema, 'DBICTest::Schema');
68 # sleep until this spot so everything starts simultaneously
69 # add "until turn of second" for prettier display
70 my $t = int( time() ) + 4;
75 local $SIG{__WARN__} = sigwarn_silencer( qr/Thread creation failed/i );
77 for (1.. $num_children) {
78 push @threads, threads->create(sub {
79 my $tid = threads->tid;
82 note ("Thread $tid starting work at " . time() );
84 my $rsrc = $schema->source('Artist');
86 isa_ok ($rsrc->schema, 'DBICTest::Schema');
87 my $s2 = $rsrc->schema->clone;
89 sleep (0.2); # without this many tasty crashes even on latest perls
91 skip "EAGAIN encountered, your system is likely bogged down: skipping rest of test", 1
92 if $! == Errno::EAGAIN();
94 die "Unable to start thread: $!";
99 ok(1, "past spawning");
101 $_->join for @threads;
103 ok(1, "past joining");
105 # Too many threading bugs on exit, none of which have anything to do with
106 # the actual stuff we test
107 $ENV{DBICTEST_DIRTY_EXIT} = 1