From 6c6ebb91412d9815cda5b22f537b78dcc9ecc7ad Mon Sep 17 00:00:00 2001 From: Sergey Skvortsov Date: Mon, 6 Jul 2009 12:16:08 +0000 Subject: - Add option MULTIPLICITY - Add bugfix for map memory leak (RT#53038) --- lang/perl5.10/Makefile | 7 ++- lang/perl5.10/files/patch-bug53038 | 95 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 lang/perl5.10/files/patch-bug53038 (limited to 'lang/perl5.10') diff --git a/lang/perl5.10/Makefile b/lang/perl5.10/Makefile index 429d5003a610..31378ddb7a11 100644 --- a/lang/perl5.10/Makefile +++ b/lang/perl5.10/Makefile @@ -7,7 +7,7 @@ PORTNAME= perl PORTVERSION= ${PERL_VERSION} -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= lang devel perl5 MASTER_SITES= CPAN \ ${MASTER_SITE_LOCAL:S/$/:local/} \ @@ -28,6 +28,7 @@ OPTIONS= DEBUGGING "Build with debugging support" off \ PERL_MALLOC "Use Perl malloc" off \ PERL_64BITINT "Use 64 bit integers (on i386)" on \ THREADS "Build threaded perl" off \ + MULTIPLICITY "Use multiplicity" off \ SUIDPERL "Build set-user-id suidperl binary" off \ SITECUSTOMIZE "Run-time customization of @INC" off \ USE_PERL "Rewrite links in /usr/bin" on @@ -130,6 +131,10 @@ CONFIGURE_ARGS+= -Dusemymalloc=n CONFIGURE_ARGS+= -Duse64bitint .endif +.if defined(WITH_MULTIPLICITY) +CONFIGURE_ARGS+= -Dusemultiplicity=y +.endif + .if defined(WITH_SITECUSTOMIZE) CONFIGURE_ARGS+= -Dusesitecustomize .endif diff --git a/lang/perl5.10/files/patch-bug53038 b/lang/perl5.10/files/patch-bug53038 new file mode 100644 index 000000000000..c1c0954f807f --- /dev/null +++ b/lang/perl5.10/files/patch-bug53038 @@ -0,0 +1,95 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=53038 +# http://perl5.git.perl.org/perl.git/commitdiff/414bf5ae0886eb91e2f6dbb35893ddb012852bef?hp=2556f95e0f4f5e8e95c9766374614ab52edefe3d +diff --git a/XSUB.h b/XSUB.h +index 46e9c29..2d95b1e 100644 +--- XSUB.h ++++ XSUB.h +@@ -364,10 +364,10 @@ Rethrows a previously caught exception. See L. + SAVETMPS ; \ + SAVEINT(db->filtering) ; \ + db->filtering = TRUE ; \ +- SAVESPTR(DEFSV) ; \ ++ SAVE_DEFSV ; \ + if (name[7] == 's') \ + arg = newSVsv(arg); \ +- DEFSV = arg ; \ ++ DEFSV_set(arg) ; \ + SvTEMP_off(arg) ; \ + PUSHMARK(SP) ; \ + PUTBACK ; \ +diff --git a/perl.h b/perl.h +index e07416e..526155b 100644 +--- perl.h ++++ perl.h +@@ -1306,8 +1306,12 @@ EXTERN_C char *crypt(const char *, const char *); + #endif + + #define ERRSV GvSV(PL_errgv) +-/* FIXME? Change the assignments to PL_defgv to instantiate GvSV? */ +-#define DEFSV GvSVn(PL_defgv) ++#ifdef PERL_CORE ++# define DEFSV (0 + GvSVn(PL_defgv)) ++#else ++# define DEFSV GvSVn(PL_defgv) ++#endif ++#define DEFSV_set(sv) (GvSV(PL_defgv) = (sv)) + #define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) + + #define ERRHV GvHV(PL_errgv) /* XXX unused, here for compatibility */ +diff --git a/pp_ctl.c b/pp_ctl.c +index 08b14c6..3ef7e32 100644 +--- pp_ctl.c ++++ pp_ctl.c +@@ -988,7 +988,7 @@ PP(pp_grepstart) + if (PL_op->op_private & OPpGREP_LEX) + PAD_SVl(PL_op->op_targ) = src; + else +- DEFSV = src; ++ DEFSV_set(src); + + PUTBACK; + if (PL_op->op_type == OP_MAPSTART) +@@ -1099,7 +1099,7 @@ PP(pp_mapwhile) + if (PL_op->op_private & OPpGREP_LEX) + PAD_SVl(PL_op->op_targ) = src; + else +- DEFSV = src; ++ DEFSV_set(src); + + RETURNOP(cLOGOP->op_other); + } +@@ -4822,7 +4822,7 @@ S_run_user_filter(pTHX_ int idx, SV *buf_sv, int maxlen) + SAVETMPS; + EXTEND(SP, 2); + +- DEFSV = upstream; ++ DEFSV_set(upstream); + PUSHMARK(SP); + mPUSHi(0); + if (filter_state) { +diff --git a/pp_hot.c b/pp_hot.c +index eeedc5b..6450e25 100644 +--- pp_hot.c ++++ pp_hot.c +@@ -2424,7 +2424,7 @@ PP(pp_grepwhile) + if (PL_op->op_private & OPpGREP_LEX) + PAD_SVl(PL_op->op_targ) = src; + else +- DEFSV = src; ++ DEFSV_set(src); + + RETURNOP(cLOGOP->op_other); + } +diff --git a/regexec.c b/regexec.c +index 025d159..6c0923f 100644 +--- regexec.c ++++ regexec.c +@@ -2250,7 +2250,7 @@ S_regtry(pTHX_ regmatch_info *reginfo, char **startpos) + /* Make $_ available to executed code. */ + if (reginfo->sv != DEFSV) { + SAVE_DEFSV; +- DEFSV = reginfo->sv; ++ DEFSV_set(reginfo->sv); + } + + if (!(SvTYPE(reginfo->sv) >= SVt_PVMG && SvMAGIC(reginfo->sv) -- cgit v1.2.3