X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Types.xs;h=b5cd70f7c332d552055bec332042811771237edd;hb=5c6327ad83791c6e2fedd165756005382b14de7e;hp=a560b2df6d7c22e5e1a06755323f2b0b8ed421ea;hpb=cee3105da7f14fb65d736d945f2d9f948da68e92;p=perl%2Fmodules%2FLexical-Types.git diff --git a/Types.xs b/Types.xs index a560b2d..b5cd70f 100644 --- a/Types.xs +++ b/Types.xs @@ -153,7 +153,7 @@ STATIC SV *lt_clone(pTHX_ SV *sv, tTHX owner) { SvREFCNT_dec(stashes); } - return dupsv; + return SvREFCNT_inc(dupsv); } STATIC void lt_ptable_hints_clone(pTHX_ ptable_ent *ent, void *ud_) { @@ -330,8 +330,8 @@ typedef struct { OP *(*pp_padsv)(pTHX); } lt_op_info; -STATIC void lt_map_store(pPTBLMS_ const OP *o, SV *orig_pkg, SV *type_pkg, SV *type_meth, OP *(*pp_padsv)(pTHX)) { -#define lt_map_store(O, OP, TP, TM, PP) lt_map_store(aPTBLMS_ (O), (OP), (TP), (TM), (PP)) +STATIC void lt_map_store(pTHX_ const OP *o, SV *orig_pkg, SV *type_pkg, SV *type_meth, OP *(*pp_padsv)(pTHX)) { +#define lt_map_store(O, OP, TP, TM, PP) lt_map_store(aTHX_ (O), (OP), (TP), (TM), (PP)) lt_op_info *oi; #ifdef USE_ITHREADS @@ -373,6 +373,9 @@ STATIC void lt_map_store(pPTBLMS_ const OP *o, SV *orig_pkg, SV *type_pkg, SV *t oi->orig_pkg_len = op_len; oi->type_pkg_len = tp_len; oi->type_meth_len = tm_len; + SvREFCNT_dec(orig_pkg); + SvREFCNT_dec(type_pkg); + SvREFCNT_dec(type_meth); } #else /* MULTIPLICITY */ oi->orig_pkg = orig_pkg;