The attached patch appears to fix the problem discussed in the
"plperl gives error after reconnect" thread in pgsql-bugs:

http://archives.postgresql.org/pgsql-bugs/2005-08/msg00133.php

Unfortunately I don't understand *why* it fixes the problem, which
means I'm not sure that it's the correct fix.  As Tom Lane and I
discovered, Perl builds with threading don't appear to have a
problem, while Perl builds without threading do.  It's not clear
to me why "mksafefunc" works in some Perl installations but
"::mksafefunc" is required in others, given otherwise identical
test conditions.  Can anybody explain?

If this is indeed the correct fix then it should probably be
backpatched to 8.0.

-- 
Michael Fuhr
Index: plperl.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/pl/plperl/plperl.c,v
retrieving revision 1.89
diff -c -r1.89 plperl.c
*** plperl.c    12 Aug 2005 21:26:32 -0000      1.89
--- plperl.c    20 Aug 2005 18:35:14 -0000
***************
*** 680,686 ****
         * errors properly.  Perhaps it's because there's another level of
         * eval inside mksafefunc?
         */
!       count = perl_call_pv((trusted ? "mksafefunc" : "mkunsafefunc"),
                                                 G_SCALAR | G_EVAL | G_KEEPERR);
        SPAGAIN;
  
--- 680,686 ----
         * errors properly.  Perhaps it's because there's another level of
         * eval inside mksafefunc?
         */
!       count = perl_call_pv((trusted ? "::mksafefunc" : "::mkunsafefunc"),
                                                 G_SCALAR | G_EVAL | G_KEEPERR);
        SPAGAIN;
  
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to