From: Vincent Pit Date: Tue, 31 Aug 2010 11:17:47 +0000 (+0200) Subject: SvREFCNT_{inc,dec} overhaul, fixing a couple of leaks X-Git-Tag: v0.09~11 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Fre-engine-Plugin.git;a=commitdiff_plain;h=24c4ef9bba54bcbaecc3cc15bbc6b3fe866a1c63 SvREFCNT_{inc,dec} overhaul, fixing a couple of leaks --- diff --git a/Plugin.xs b/Plugin.xs index 036185f..0455756 100644 --- a/Plugin.xs +++ b/Plugin.xs @@ -113,7 +113,7 @@ STATIC SV *rep_clone(pTHX_ SV *sv, tTHX owner) { SvREFCNT_dec(stashes); } - return SvREFCNT_inc(dupsv); + return SvREFCNT_inc_simple(dupsv); } STATIC void rep_ptable_clone(pTHX_ ptable_ent *ent, void *ud_) { @@ -126,9 +126,9 @@ STATIC void rep_ptable_clone(pTHX_ ptable_ent *ent, void *ud_) { h2 = PerlMemShared_malloc(sizeof *h2); h2->comp = rep_clone(h1->comp, ud->owner); - SvREFCNT_inc(h2->comp); + SvREFCNT_inc_simple_void(h2->comp); h2->exec = rep_clone(h1->exec, ud->owner); - SvREFCNT_inc(h2->exec); + SvREFCNT_inc_simple_void(h2->exec); #if REP_WORKAROUND_REQUIRE_PROPAGATION h2->cxreq = h1->cxreq; #endif @@ -269,7 +269,7 @@ Plugin_comp(pTHX_ SV * const pattern, U32 flags) /* Our blessed object */ obj = newSV(0); - SvREFCNT_inc(obj); + SvREFCNT_inc_simple_void_NN(obj); Newxz(re, 1, struct replug); sv_setref_pv(obj, "re::engine::Plugin", (void*)re); @@ -301,7 +301,7 @@ Plugin_comp(pTHX_ SV * const pattern, U32 flags) /* Store the pattern for ->pattern */ re->pattern = (SV*)pattern; - SvREFCNT_inc(re->pattern); + SvREFCNT_inc_simple_void(re->pattern); /* If there's an exec callback, store it into the private object so * that it will be the one to be called, even if the engine changes @@ -354,8 +354,9 @@ Plugin_exec(pTHX_ REGEXP * const RX, char *stringarg, char *strend, SV *ret; /* Store the current str for ->str */ - self->str = (SV*)sv; - SvREFCNT_inc(self->str); + SvREFCNT_dec(self->str); + self->str = sv; + SvREFCNT_inc_simple_void(self->str); ENTER; SAVETMPS; @@ -703,8 +704,9 @@ void stash(re::engine::Plugin self, ...) PPCODE: if (items > 1) { + SvREFCNT_dec(self->stash); self->stash = ST(1); - SvREFCNT_inc(self->stash); + SvREFCNT_inc_simple_void(self->stash); XSRETURN_EMPTY; } else { XPUSHs(self->stash); @@ -758,7 +760,7 @@ PPCODE: if (items > 1) { SvREFCNT_dec(self->cb_exec); self->cb_exec = ST(1); - SvREFCNT_inc(self->cb_exec); + SvREFCNT_inc_simple_void(self->cb_exec); } void @@ -767,7 +769,7 @@ PPCODE: if (items > 1) { SvREFCNT_dec(self->cb_num_capture_buff_FETCH); self->cb_num_capture_buff_FETCH = ST(1); - SvREFCNT_inc(self->cb_num_capture_buff_FETCH); + SvREFCNT_inc_simple_void(self->cb_num_capture_buff_FETCH); } void @@ -776,7 +778,7 @@ PPCODE: if (items > 1) { SvREFCNT_dec(self->cb_num_capture_buff_STORE); self->cb_num_capture_buff_STORE = ST(1); - SvREFCNT_inc(self->cb_num_capture_buff_STORE); + SvREFCNT_inc_simple_void(self->cb_num_capture_buff_STORE); } void @@ -785,7 +787,7 @@ PPCODE: if (items > 1) { SvREFCNT_dec(self->cb_num_capture_buff_LENGTH); self->cb_num_capture_buff_LENGTH = ST(1); - SvREFCNT_inc(self->cb_num_capture_buff_LENGTH); + SvREFCNT_inc_simple_void(self->cb_num_capture_buff_LENGTH); } SV *