From: Jerry D. Hedden Date: Tue, 26 Jun 2007 11:26:25 +0000 (-0400) Subject: Add TODO tests for refcount issues related to threads X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=9708a845889d0a94d824aaba11ae342e024a4351;p=p5sagit%2Fp5-mst-13.2.git Add TODO tests for refcount issues related to threads From: "Jerry D. Hedden" Message-ID: <1ff86f510706260826h79124373y51d899e53c96b50e@mail.gmail.com> p4raw-id: //depot/perl@31471 --- diff --git a/t/op/threads.t b/t/op/threads.t index f2b6df2..cb6fda6 100644 --- a/t/op/threads.t +++ b/t/op/threads.t @@ -2,7 +2,7 @@ BEGIN { chdir 't' if -d 't'; @INC = '../lib'; - require './test.pl'; # for which_perl() etc + require './test.pl'; $| = 1; } @@ -18,7 +18,7 @@ BEGIN { print "1..0 # Skip: no dynamic loading on miniperl, no threads\n"; exit 0; } - plan(6); + plan(11); } use threads; @@ -113,3 +113,49 @@ fresh_perl_is(<<'EOI', 'ok', { }, 'Ensure PL_linestr can be cloned'); use threads; print do 'op/threads_create.pl' || die $@; EOI + + +TODO: { + no strict 'vars'; # Accessing $TODO from test.pl + local $TODO = 'refcount issues with threads'; + +# Attempt to free unreferenced scalar... +fresh_perl_is(<<'EOI', 'ok', { }, 'thread sub via scalar'); + use threads; + my $test = sub {}; + threads->create($test)->join(); + print 'ok'; +EOI + +# Attempt to free unreferenced scalar... +fresh_perl_is(<<'EOI', 'ok', { }, 'thread sub via $_[0]'); + use threads; + sub thr { threads->new($_[0]); } + thr(sub { })->join; + print 'ok'; +EOI + +# Scalars leaked: 1 +foreach my $BLOCK (qw(CHECK INIT)) { + fresh_perl_is(<create(sub {})->join; } + print 'ok'; +EOI +} + +# Scalars leaked: 1 +fresh_perl_is(<<'EOI', 'ok', { }, 'Bug #41138'); + use threads; + leak($x); + sub leak + { + local $x; + threads->create(sub {})->join(); + } + print 'ok'; +EOI + +} # TODO + +# EOF