Front page | perl.perl5.porters |
Postings from November 2008
[perl #7021] perl_clone breaks refcnt on weaken
Thread Previous
From:
Steve Peters via RT
Date:
November 25, 2008 11:13
Subject:
[perl #7021] perl_clone breaks refcnt on weaken
Message ID:
rt-3.6.HEAD-10965-1227621669-1352.7021-15-0@perl.org
On Thu May 24 01:58:01 2001, RT_System wrote:
> --- sv.c.10175 Thu May 24 06:30:00 2001
> +++ sv.c Thu May 24 06:23:26 2001
> @@ -7980,14 +7980,18 @@
> break;
> case SVt_RV:
> SvANY(dstr) = new_XRV();
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> break;
> case SVt_PV:
> SvANY(dstr) = new_XPV();
> SvCUR(dstr) = SvCUR(sstr);
> SvLEN(dstr) = SvLEN(sstr);
> if (SvROK(sstr))
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> else if (SvPVX(sstr) && SvLEN(sstr))
> SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
> else
> @@ -7999,7 +8003,9 @@
> SvLEN(dstr) = SvLEN(sstr);
> SvIVX(dstr) = SvIVX(sstr);
> if (SvROK(sstr))
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> else if (SvPVX(sstr) && SvLEN(sstr))
> SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
> else
> @@ -8012,7 +8018,9 @@
> SvIVX(dstr) = SvIVX(sstr);
> SvNVX(dstr) = SvNVX(sstr);
> if (SvROK(sstr))
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> else if (SvPVX(sstr) && SvLEN(sstr))
> SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
> else
> @@ -8027,7 +8035,9 @@
> SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
> SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
> if (SvROK(sstr))
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> else if (SvPVX(sstr) && SvLEN(sstr))
> SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
> else
> @@ -8042,7 +8052,9 @@
> SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
> SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
> if (SvROK(sstr))
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> else if (SvPVX(sstr) && SvLEN(sstr))
> SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
> else
> @@ -8060,7 +8072,9 @@
> SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
> SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
> if (SvROK(sstr))
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> else if (SvPVX(sstr) && SvLEN(sstr))
> SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
> else
> @@ -8091,7 +8105,9 @@
> SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
> SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
> if (SvROK(sstr))
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> else if (SvPVX(sstr) && SvLEN(sstr))
> SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
> else
> @@ -8112,7 +8128,9 @@
> SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
> SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
> if (SvROK(sstr))
> - SvRV(dstr) = sv_dup_inc(SvRV(sstr));
> + SvRV(dstr) = SvWEAKREF(SvRV(sstr))
> + ? sv_dup_inc(SvRV(sstr))
> + : sv_dup(SvRV(sstr));
> else if (SvPVX(sstr) && SvLEN(sstr))
> SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
> else
Thanks! This change was applied with change #10199 (really).
Steve Peters
Thread Previous