summaryrefslogtreecommitdiff
path: root/src/interfaces/libpgtcl
diff options
context:
space:
mode:
authorBruce Momjian2001-09-06 02:54:56 +0000
committerBruce Momjian2001-09-06 02:54:56 +0000
commit37c0b648759bb24ebf17831abc35533f356be7c4 (patch)
treedc20fde37f37ac39b0067311c4b669f0d62befee /src/interfaces/libpgtcl
parentee0ef05b8d9b22e5c7f62cb92b54fc9acc26357d (diff)
Below is the patch against current cvs for libpgtcl and
two additional files win32.mak and libpgtcl.def. This patch allows to compile libpgtcl.dll on Windows with tcl > 8.0. I've tested it on WinNT (VC6.0), SUSE Linux (7.0) and Solaris 2.6 with tcl 8.3.3. Mikhail Terekhov
Diffstat (limited to 'src/interfaces/libpgtcl')
-rw-r--r--src/interfaces/libpgtcl/pgtclCmds.c10
-rw-r--r--src/interfaces/libpgtcl/pgtclCmds.h6
-rw-r--r--src/interfaces/libpgtcl/pgtclId.c23
3 files changed, 28 insertions, 11 deletions
diff --git a/src/interfaces/libpgtcl/pgtclCmds.c b/src/interfaces/libpgtcl/pgtclCmds.c
index a87cb1842cb..8fef8732fd6 100644
--- a/src/interfaces/libpgtcl/pgtclCmds.c
+++ b/src/interfaces/libpgtcl/pgtclCmds.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.56 2001/08/10 22:50:10 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.57 2001/09/06 02:54:56 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -403,6 +403,8 @@ Pg_connect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
int
Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
{
+ Pg_ConnectionId *connid;
+ PGconn *conn;
Tcl_Channel conn_chan;
if (argc != 2)
@@ -419,6 +421,12 @@ Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[])
return TCL_ERROR;
}
+#if TCL_MAJOR_VERSION >= 8
+ conn = PgGetConnectionId(interp, argv[1], &connid);
+ if (connid->notifier_channel != NULL)
+ Tcl_UnregisterChannel(interp, connid->notifier_channel);
+#endif
+
return Tcl_UnregisterChannel(interp, conn_chan);
}
diff --git a/src/interfaces/libpgtcl/pgtclCmds.h b/src/interfaces/libpgtcl/pgtclCmds.h
index 69ae93015e9..6b40ea63c67 100644
--- a/src/interfaces/libpgtcl/pgtclCmds.h
+++ b/src/interfaces/libpgtcl/pgtclCmds.h
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pgtclCmds.h,v 1.21 2001/03/22 04:01:24 momjian Exp $
+ * $Id: pgtclCmds.h,v 1.22 2001/09/06 02:54:56 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -64,7 +64,11 @@ typedef struct Pg_ConnectionId_s
Pg_TclNotifies *notify_list;/* head of list of notify info */
int notifier_running; /* notify event source is live */
+#if TCL_MAJOR_VERSION >= 8
+ Tcl_Channel notifier_channel;/* Tcl_Channel on which notifier is listening */
+#else
int notifier_socket;/* PQsocket on which notifier is listening */
+#endif
} Pg_ConnectionId;
/* Values of res_copyStatus */
diff --git a/src/interfaces/libpgtcl/pgtclId.c b/src/interfaces/libpgtcl/pgtclId.c
index f4acde2fc47..af58f66247b 100644
--- a/src/interfaces/libpgtcl/pgtclId.c
+++ b/src/interfaces/libpgtcl/pgtclId.c
@@ -13,7 +13,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.25 2001/02/10 02:31:29 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.26 2001/09/06 02:54:56 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -174,10 +174,16 @@ PgSetConnectionId(Tcl_Interp *interp, PGconn *conn)
connid->results[i] = NULL;
connid->notify_list = NULL;
connid->notifier_running = 0;
- connid->notifier_socket = -1;
sprintf(connid->id, "pgsql%d", PQsocket(conn));
+#if TCL_MAJOR_VERSION >= 8
+ connid->notifier_channel = Tcl_MakeTcpClientChannel((ClientData) PQsocket(conn));
+ Tcl_RegisterChannel(interp, connid->notifier_channel);
+#else
+ connid->notifier_socket = -1;
+#endif
+
#if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
/* Original signature (only seen in Tcl 7.5) */
conn_chan = Tcl_CreateChannel(&Pg_ConnType, connid->id, NULL, NULL, (ClientData) connid);
@@ -581,7 +587,7 @@ PgNotifyTransferEvents(Pg_ConnectionId * connid)
event->info = *notify;
event->connid = connid;
Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL);
- free(notify);
+ PQfreeNotify(notify);
}
/*
@@ -688,18 +694,17 @@ PgStartNotifyEventSource(Pg_ConnectionId * connid)
if (pqsock >= 0)
{
#if TCL_MAJOR_VERSION >= 8
- /* In Tcl 8, Tcl_CreateFileHandler takes a socket directly. */
- Tcl_CreateFileHandler(pqsock, TCL_READABLE,
- Pg_Notify_FileHandler, (ClientData) connid);
+ Tcl_CreateChannelHandler(connid->notifier_channel, TCL_READABLE,
+ Pg_Notify_FileHandler, (ClientData) connid);
#else
/* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
Tcl_File tclfile = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
Tcl_CreateFileHandler(tclfile, TCL_READABLE,
Pg_Notify_FileHandler, (ClientData) connid);
+ connid->notifier_socket = pqsock;
#endif
connid->notifier_running = 1;
- connid->notifier_socket = pqsock;
}
}
}
@@ -711,8 +716,8 @@ PgStopNotifyEventSource(Pg_ConnectionId * connid)
if (connid->notifier_running)
{
#if TCL_MAJOR_VERSION >= 8
- /* In Tcl 8, Tcl_DeleteFileHandler takes a socket directly. */
- Tcl_DeleteFileHandler(connid->notifier_socket);
+ Tcl_DeleteChannelHandler(connid->notifier_channel,
+ Pg_Notify_FileHandler, (ClientData) connid);
#else
/* In Tcl 7.5 and 7.6, we need to gin up a Tcl_File. */
Tcl_File tclfile = Tcl_GetFile((ClientData) connid->notifier_socket,