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

Reply via email to