Subversion Repositories

?revision_form?Rev ?revision_input??revision_submit??revision_endform?

Rev 33 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#! /bin/sh
## 12_perl_init.dpatch by Magnus Holmgren <holmgren@debian.org>
##
## DP: Properly call PERL_SYS_INIT() and PERL_SYS_TERM().
## DP: Credit to Niko Tyni <ntyni@debian.org>.

FILE=src/modules/Perl/configure

dpatch_patch() {
    [ ! -e ${FILE}.dp-orig ] || return 1

    sed -i.dp-orig -f - ${FILE} <<'END_SED'
/my_perl = perl_alloc();/i\
  PERL_SYS_INIT3(&argc,&argv,&env);
/perl_free(my_perl);/a\
  PERL_SYS_TERM();
END_SED

    patch -p1 $*

}

dpatch_unpatch() {
    patch -p1 -R $* && [ -e ${FILE}.dp-orig ] && mv -f ${FILE}.dp-orig ${FILE}

}


DPATCH_LIB_NO_DEFAULT=1

. /usr/share/dpatch/dpatch.lib.sh

exit

@DPATCH@
--- 7.6-stable~/src/modules/Perl/perlmod.c      2004-04-15 02:11:26.000000000 +0200
+++ 7.6-stable/src/modules/Perl/perlmod.c       2008-06-16 22:50:54.000000000 +0200
@@ -235,6 +235,7 @@
 }
 
 static char *dummyargv[] = { "perl", "-e", "1", 0 };
+static int dummyargc = 3;
 
 static void init_perl_glue(struct object *o)
 {
@@ -263,6 +264,9 @@
     return;
   }
 #endif
+  if (num_perl_interpreters == 0)
+    PERL_SYS_INIT(&dummyargc, &dummyargv);
+
   MT_PERMIT;
   ps->perl = perl_alloc();
   PL_perl_destruct_level=2;
@@ -334,6 +338,8 @@
     perl_free(ps->perl);
     MT_FORBID;
     num_perl_interpreters--;
+    if (num_perl_interpreters == 0)
+      PERL_SYS_TERM();
   }
   _free_arg_and_env();
 }