Blame t/local/62_threads-ctx_new-deadlock.t

Packit b893dc
use strict;
Packit b893dc
use warnings;
Packit b893dc
use Config;
Packit b893dc
use Test::More;
Packit b893dc
Packit b893dc
BEGIN {
Packit b893dc
  plan skip_all => "your perl is not compiled with ithreads" unless $Config{useithreads};
Packit b893dc
  require threads;
Packit b893dc
};
Packit b893dc
Packit b893dc
#XXX-TODO perhaps perl+ithreads related issue (needs more investigation)
Packit b893dc
plan skip_all => "this test sometimes crashes on cygwin" if $^O eq 'cygwin';
Packit b893dc
Packit b893dc
plan tests => 1;
Packit b893dc
Packit b893dc
use FindBin;
Packit b893dc
use Net::SSLeay;
Packit b893dc
Packit b893dc
my $start_time = time;
Packit b893dc
Packit b893dc
Net::SSLeay::randomize();
Packit b893dc
Net::SSLeay::load_error_strings();
Packit b893dc
Net::SSLeay::SSLeay_add_ssl_algorithms();
Packit b893dc
Packit b893dc
#exit the whole program if it runs too long
Packit b893dc
threads->new( sub { sleep 20; warn "FATAL: TIMEOUT!"; exit } )->detach;
Packit b893dc
Packit b893dc
#print STDERR "Gonna start multi-threading part\n";
Packit b893dc
threads->new(\&do_check) for (1..20);
Packit b893dc
Packit b893dc
#print STDERR "Waiting for all threads to finish\n";
Packit b893dc
do_sleep(50) while (threads->list());
Packit b893dc
Packit b893dc
pass("successfully finished, duration=".(time-$start_time));
Packit b893dc
exit(0);
Packit b893dc
Packit b893dc
sub do_sleep {
Packit b893dc
  my $miliseconds = shift;
Packit b893dc
  select(undef, undef, undef, $miliseconds/1000);
Packit b893dc
}
Packit b893dc
Packit b893dc
sub do_check {
Packit b893dc
  #printf STDERR ("[thread:%04d] do_check started\n", threads->tid);
Packit b893dc
  
Packit b893dc
  my $c = Net::SSLeay::CTX_new() or warn "CTX_new failed" and exit;
Packit b893dc
  my $d = Net::SSLeay::new($c) or warn "SSL_new" and exit;
Packit b893dc
  my $e = Net::SSLeay::SESSION_new() or warn "SSL_SESSION_new failed" and exit;
Packit b893dc
  Net::SSLeay::set_session($d,$e);
Packit b893dc
  Net::SSLeay::SESSION_free($e);
Packit b893dc
  Net::SSLeay::free($d);
Packit b893dc
  Net::SSLeay::CTX_free($c);
Packit b893dc
    
Packit b893dc
  #printf STDERR ("[thread:%04d] do_check finished\n", threads->tid);
Packit b893dc
  threads->detach();
Packit b893dc
}