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)) {