Initialise perl library as documented in perl API. Backpatch to release 7.4.
authorAndrew Dunstan <[email protected]>
Thu, 4 Jun 2009 15:59:55 +0000 (15:59 +0000)
committerAndrew Dunstan <[email protected]>
Thu, 4 Jun 2009 15:59:55 +0000 (15:59 +0000)
src/pl/plperl/plperl.c

index 7c6cc868cd4dab3fcd1387a5f4dd7e97ccbddd51..f937c67bfa74f75f3be8f404ff16da26ba9b7061 100644 (file)
@@ -1,7 +1,7 @@
 /**********************************************************************
  * plperl.c - perl as a procedural language for PostgreSQL
  *
- *   $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.146 2009/02/20 10:39:19 petere Exp $
+ *   $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.147 2009/06/04 15:59:55 adunstan Exp $
  *
  **********************************************************************/
 
@@ -399,6 +399,8 @@ plperl_init_interp(void)
        "", "-e", PERLBOOT
    };
 
+   int nargs = 3;
+
 #ifdef WIN32
 
    /*
@@ -442,13 +444,19 @@ plperl_init_interp(void)
 #endif
 
 
+#ifdef PERL_SYS_INIT3
+   /* only call this the first time through, as per perlembed man page */
+   if (interp_state == INTERP_NONE)
+       PERL_SYS_INIT3(&nargs, (char ***) &embedding, NULL);
+#endif
+
    plperl_held_interp = perl_alloc();
    if (!plperl_held_interp)
        elog(ERROR, "could not allocate Perl interpreter");
 
    perl_construct(plperl_held_interp);
    perl_parse(plperl_held_interp, plperl_init_shared_libs,
-              3, embedding, NULL);
+              nargs, embedding, NULL);
    perl_run(plperl_held_interp);
 
    if (interp_state == INTERP_NONE)