On Mon, Nov 01, 2004 at 04:46:00AM +0000, Steve Hay wrote:
> Automated smoke report for 5.9.2 patch 23450
> TANGAROA.uk.radan.com: Intel(R) Pentium(R) 4 CPU 2.00GHz(~1992 MHz) (x86/1 cpu)
> on MSWin32 - WinXP/.Net SP1
> using cl version 12.00.8804
> smoketime 6 hours 8 minutes (average 11 minutes 32 seconds)
>
> Summary: FAIL(M)
>
> O = OK F = Failure(s), extended report at the bottom
> X = Failure(s) under TEST but not under harness
> ? = still running or test results not (yet) available
> Build failures during: - = unknown or N/A
> c = Configure, m = make, M = make (after miniperl), t = make test-prep
>
> 23450 Configuration (common) -DINST_TOP=$(INST_DRV)\Smoke\doesntexist
> ----------- ---------------------------------------------------------
> O O
> O O -Dusemymalloc
> O O -Duselargefiles
> O O -Duselargefiles -Dusemymalloc
> M M -Duseithreads
> M M -Duseithreads -Dusemymalloc
> M M -Duseithreads -Duselargefiles
> M M -Duseithreads -Duselargefiles -Dusemymalloc
> O O -Accflags='-DPERL_COPY_ON_WRITE'
> O O -Accflags='-DPERL_COPY_ON_WRITE' -Dusemymalloc
> O O -Accflags='-DPERL_COPY_ON_WRITE' -Duselargefiles
> O O -Accflags='-DPERL_COPY_ON_WRITE' -Duselargefiles -Dusemymalloc
> M M -Accflags='-DPERL_COPY_ON_WRITE' -Duseithreads
> M M -Accflags='-DPERL_COPY_ON_WRITE' -Duseithreads -Dusemymalloc
> M M -Accflags='-DPERL_COPY_ON_WRITE' -Duseithreads -Duselargefiles
> M M -Accflags='-DPERL_COPY_ON_WRITE' -Duseithreads -Duselargefiles
> -Dusemymalloc
> | +--------- -DDEBUGGING
> +----------- no debugging
Given that this all went wrong between 23432 and 23436, I susped change 23433:
Change 23433 by [EMAIL PROTECTED] on 2004/10/29 21:04:17
[perl #31851] Threading crash with closures
various OpREFCNT_inc() operations weren't doing locking
Affected files ...
... //depot/perl/pad.c#37 edit
... //depot/perl/regcomp.c#340 edit
... //depot/perl/sv.c#767 edit
Differences ...
==== //depot/perl/pad.c#37 (text) ====
@@ -1410,7 +1410,9 @@
#endif
CvGV(cv) = CvGV(proto);
CvSTASH(cv) = CvSTASH(proto);
+ OP_REFCNT_LOCK;
CvROOT(cv) = OpREFCNT_inc(CvROOT(proto));
+ OP_REFCNT_UNLOCK;
CvSTART(cv) = CvSTART(proto);
CvOUTSIDE(cv) = (CV*)SvREFCNT_inc(outside);
CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(proto);
==== //depot/perl/regcomp.c#340 (text) ====
@@ -4983,9 +4983,14 @@
(SvTYPE(new_comppad) == SVt_PVAV) ?
new_comppad : Null(PAD *)
);
+ OP_REFCNT_LOCK;
if (!OpREFCNT_dec((OP_4tree*)r->data->data[n])) {
+ OP_REFCNT_UNLOCK;
op_free((OP_4tree*)r->data->data[n]);
}
+ else {
+ OP_REFCNT_UNLOCK;
+ }
PAD_RESTORE_LOCAL(old_comppad);
SvREFCNT_dec((SV*)new_comppad);
==== //depot/perl/sv.c#767 (text) ====
@@ -10244,7 +10244,9 @@
case 'o':
/* Compiled op trees are readonly, and can thus be
shared without duplication. */
+ OP_REFCNT_LOCK;
d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
+ OP_REFCNT_UNLOCK;
break;
case 'n':
d->data[i] = r->data->data[i];
@@ -10955,7 +10957,9 @@
Perl_rvpv_dup(aTHX_ dstr, sstr, param);
CvSTASH(dstr) = hv_dup(CvSTASH(sstr), param); /* NOTE: not refcounted */
CvSTART(dstr) = CvSTART(sstr);
+ OP_REFCNT_LOCK;
CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
+ OP_REFCNT_UNLOCK;
CvXSUB(dstr) = CvXSUB(sstr);
CvXSUBANY(dstr) = CvXSUBANY(sstr);
if (CvCONST(sstr)) {