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:
@@ -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 */
|
||||
|
Reference in New Issue
Block a user