0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 8.1.0234: incorrect reference counting in Perl interface

Problem:    Incorrect reference counting in Perl interface.
Solution:   Call SvREFCNT_inc more often, add a test. (Damien)
This commit is contained in:
Bram Moolenaar
2018-08-02 21:46:51 +02:00
parent ded27a1feb
commit 41c363a315
3 changed files with 24 additions and 10 deletions

View File

@@ -831,8 +831,7 @@ newWINrv(SV *rv, win_T *ptr)
ptr->w_perl_private = newSV(0);
sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
}
else
SvREFCNT_inc_void_NN(ptr->w_perl_private);
SvREFCNT_inc_void_NN(ptr->w_perl_private);
SvRV(rv) = ptr->w_perl_private;
SvROK_on(rv);
return sv_bless(rv, gv_stashpv("VIWIN", TRUE));
@@ -847,8 +846,7 @@ newBUFrv(SV *rv, buf_T *ptr)
ptr->b_perl_private = newSV(0);
sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
}
else
SvREFCNT_inc_void_NN(ptr->b_perl_private);
SvREFCNT_inc_void_NN(ptr->b_perl_private);
SvRV(rv) = ptr->b_perl_private;
SvROK_on(rv);
return sv_bless(rv, gv_stashpv("VIBUF", TRUE));
@@ -918,12 +916,13 @@ I32 cur_val(IV iv, SV *sv)
else
rv = newBUFrv(newSV(0), curbuf);
if (SvRV(sv) == SvRV(rv))
SvREFCNT_dec(SvRV(rv));
else // XXX: Not sure if the `else` condition are right
// Test_SvREFCNT() pass in all case.
if (SvRV(sv) != SvRV(rv))
// XXX: This magic variable is a bit confusing...
// Is curently refcounted ?
sv_setsv(sv, rv);
SvREFCNT_dec(rv);
return 0;
}
#endif /* !PROTO */