This proposed patch is related to:

Add a call to Tcl_FindExecutable() in
pltcl.c - pltcl_init_all(),
just before the call to Tcl_CreateInterp().

It should be called with argv[0] as argument, but I
don't know how to get this piece of information for
pltcl.dll. Anyway, for Windows, it is unused
(see win/tclWinFile.c - TclpFindExecutable()). Just a
value != NULL is OK, so I used an empty string.

[Jan Wieck, I'm only interested in cygwin platform.
I suggest you investigate deeper to make this
"workaround" cleaner, in order to be also compatible
with pure Unix platforms.]

Without this call, and with only the setting of the
TCL_LIBRARY environment variable, Tcl_CreateSlave()
seems to fail somewhere else, with this message:
server closed the connection unexpectedly
   This probably means the server terminated
   before or while processing the request.
The connection to the server was lost.
 Attempting reset: Succeeded.
I didn't spend time on this issue, just added the

My proposed patch generated with:
 $ diff -u pltcl.orig pltcl.c
is attached.

Do you Yahoo!?
Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes
--- pltcl.orig  2003-10-30 03:00:44.000000000 +0100
+++ pltcl.c     2004-01-06 13:54:03.937500000 +0100
@@ -35,10 +35,13 @@

-#include "postgres.h"
+//psa: change order of tcl.h and postgres.h
 #include <tcl.h>

+#include "postgres.h"
 #include <unistd.h>
 #include <fcntl.h>
 #include <setjmp.h>
@@ -207,6 +210,9 @@
         * Create the dummy hold interpreter to prevent close of
         * stdout and stderr on DeleteInterp
+//psa: argument should be argv[0]. But anyway, it is unused on Windows: just have to 
be != NULL.
        if ((pltcl_hold_interp = Tcl_CreateInterp()) == NULL)
                elog(ERROR, "pltcl: internal error - cannot create 'hold' "
@@ -219,6 +225,8 @@
        if ((pltcl_norm_interp =
                 Tcl_CreateSlave(pltcl_hold_interp, "norm", 0)) == NULL)
+//psa: tell me more about the fail
                   "pltcl: internal error - cannot create 'normal' interpreter");
@@ -227,6 +235,8 @@
        if ((pltcl_safe_interp =
                 Tcl_CreateSlave(pltcl_hold_interp, "safe", 1)) == NULL)
+//psa: tell me more about the fail
                         "pltcl: internal error - cannot create 'safe' interpreter");
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to