diff options
author | Bruce Momjian | 2001-09-06 02:54:56 +0000 |
---|---|---|
committer | Bruce Momjian | 2001-09-06 02:54:56 +0000 |
commit | 37c0b648759bb24ebf17831abc35533f356be7c4 (patch) | |
tree | dc20fde37f37ac39b0067311c4b669f0d62befee /src/interfaces/libpgtcl | |
parent | ee0ef05b8d9b22e5c7f62cb92b54fc9acc26357d (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.c | 10 | ||||
-rw-r--r-- | src/interfaces/libpgtcl/pgtclCmds.h | 6 | ||||
-rw-r--r-- | src/interfaces/libpgtcl/pgtclId.c | 23 |
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, |