From: Gurusamy Sarathy Date: Wed, 24 Mar 1999 06:34:56 +0000 (+0000) Subject: fix failure of C<&locked_sub;> under -Dusethreads X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=13e080377416312a935982b1a5c15673e6ce0d66;p=p5sagit%2Fp5-mst-13.2.git fix failure of C<&locked_sub;> under -Dusethreads p4raw-id: //depot/perl@3140 --- diff --git a/pp_hot.c b/pp_hot.c index 4c699ca..0785f5f 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -2155,8 +2155,13 @@ PP(pp_entersub) if (SP > PL_stack_base + TOPMARK) sv = *(PL_stack_base + TOPMARK + 1); else { - MUTEX_UNLOCK(CvMUTEXP(cv)); - croak("no argument for locked method call"); + AV *av = (AV*)PL_curpad[0]; + if (hasargs || !av || AvFILLp(av) < 0 + || !(sv = AvARRAY(av)[0])) + { + MUTEX_UNLOCK(CvMUTEXP(cv)); + croak("no argument for locked method call"); + } } if (SvROK(sv)) sv = SvRV(sv); diff --git a/t/lib/thread.t b/t/lib/thread.t index 8d38523..61997cf 100755 --- a/t/lib/thread.t +++ b/t/lib/thread.t @@ -13,7 +13,7 @@ BEGIN { $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3; } $| = 1; -print "1..14\n"; +print "1..18\n"; use Thread; print "ok 1\n"; @@ -71,3 +71,17 @@ sub islocked $t = Thread->new(\&islocked, "ok 13\n", "ok 14\n"); $t->join->join; +{ + package Loch::Ness; + sub new { bless [], shift } + sub monster { + use attrs qw(locked method); + my($s, $m) = @_; + print "ok $m\n"; + } + sub gollum { &monster } +} +Loch::Ness->monster(15); +Loch::Ness->new->monster(16); +Loch::Ness->gollum(17); +Loch::Ness->new->gollum(18);