On Tue, Oct 15, 2002 at 10:34:26AM +0100, Nicholas Clark wrote:
On Mon, Oct 14, 2002 at 09:00:42PM -0400, Michael G Schwern wrote:
5.8.0's threads are giving me serious headaches. When 5.8.1 comes out I
might drop support for 5.8.0's threads just so I can remove a large volume
of work-around code.
Leaving support for 5.005 threads in? I'm confused.
Test::Builder has never supported 5.005 threads. At least, I haven't done
anything special to make it work.
Or do you mean dropping all automatic threading support?
What I mean is in order to make Test::Builder work with 5.8.0's ithreads I
had to hack around a whole lot of bugs and write some really awful code.
Most of it having to do with automatic array/hash extensions not being
shared. For example:
# 5.8.0 threads bug. Shared arrays will not be auto-extended
# by a slice. Worse, we have to fill in every entry else
# we'll get an Invalid value for shared scalar error
for my $idx ($#Test_Results..$Expected_Tests-1) {
my %empty_result = ();
share(%empty_result);
$Test_Results[$idx] = \%empty_result
unless defined $Test_Results[$idx];
}
That whole block is just a work around for a 5.8.0 ithreads bug. There's
more like it to make Test::Builder work transparently with ithreads. Here's
another:
my %result;
share(%result);
%result = (
'ok' = 1,
actual_ok = 1,
name = '',
type = 'skip',
reason= $why,
);
$Test_Results[$Curr_Test-1] = \%result;
which was originally written:
$Test_Results[$Curr_Test-1] = {
'ok' = 1,
actual_ok = 1,
name = '',
type = 'skip',
reason= $why,
};
and could not be written:
$Test_Results[$Curr_Test-1] = share {
'ok' = 1,
actual_ok = 1,
name = '',
type = 'skip',
reason= $why,
};
because threads::shared::share() is broken when threads are disabled.
Really irritating stuff. Every release since 0.45 has added more ithread
work arounds.
So when 5.8.1 comes out and ithreads work better I plan on dropping support
for 5.8.0's still broken ithreads like a hot potato so I can remove all that
hackery. 5.8.1's less buggy ithreads will be supported, hopefully with a
minimum of hackery. Users will simply have to upgrade, which they really
should do anyway if they're using threads.
--
Michael G. Schwern [EMAIL PROTECTED]http://www.pobox.com/~schwern/
Perl Quality Assurance [EMAIL PROTECTED] Kwalitee Is Job One
I'm spanking my yacht.