diff --git a/src/interfaces/libpgtcl/pgtclCmds.c b/src/interfaces/libpgtcl/pgtclCmds.c index 4b047b1b6e..0cb46686dc 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.63 2002/08/17 12:19:31 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.64 2002/08/18 01:39:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -419,11 +419,8 @@ Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) #if TCL_MAJOR_VERSION >= 8 conn = PgGetConnectionId(interp, argv[1], &connid); - if (connid->notifier_channel != NULL) { - /* stop listening for NOTIFY events on that channel */ - PgStopNotifyEventSource(connid,1); + if (connid->notifier_channel != NULL) Tcl_UnregisterChannel(interp, connid->notifier_channel); - } #endif return Tcl_UnregisterChannel(interp, conn_chan); diff --git a/src/interfaces/libpgtcl/pgtclId.c b/src/interfaces/libpgtcl/pgtclId.c index d5474ce61c..3a3bee63fd 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.31 2002/08/17 12:19:31 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.32 2002/08/18 01:39:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -277,7 +277,7 @@ PgDelConnectionId(DRIVER_DEL_PROTO) * Turn off the Tcl event source for this connection, and delete any * pending notify events. */ - PgStopNotifyEventSource(connid,1); + PgStopNotifyEventSource(connid); /* Close the libpq connection too */ PQfinish(connid->conn); @@ -441,7 +441,7 @@ PgGetConnByResultId(Tcl_Interp *interp, char *resid_c) *mark = '.'; if (conn_chan && Tcl_GetChannelType(conn_chan) == &Pg_ConnType) { - Tcl_SetResult(interp, (char *)Tcl_GetChannelName(conn_chan), TCL_VOLATILE); + Tcl_SetResult(interp, Tcl_GetChannelName(conn_chan), TCL_VOLATILE); return TCL_OK; } @@ -611,9 +611,7 @@ PgNotifyTransferEvents(Pg_ConnectionId * connid) * closed socket descriptor. */ if (PQsocket(connid->conn) < 0) - /* do not remove any pending events, so that the virtual notification - connection_closed will be processed */ - PgStopNotifyEventSource(connid,0); + PgStopNotifyEventSource(connid); } /* @@ -677,17 +675,7 @@ Pg_Notify_FileHandler(ClientData clientData, int mask) * it internally to libpq; but it will clear the read-ready * condition). */ - if (!PQconsumeInput(connid->conn)) { - NotifyEvent *event = (NotifyEvent *) ckalloc(sizeof(NotifyEvent)); - - PGnotify *closed = (PGnotify *) ckalloc(sizeof(PGnotify)); - strcpy(closed->relname,"connection_closed"); - event->header.proc = Pg_Notify_EventProc; - event->info= *closed; - event->connid = connid; - Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL); - ckfree((void *)closed); - } + PQconsumeInput(connid->conn); /* Transfer notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); @@ -736,7 +724,7 @@ PgStartNotifyEventSource(Pg_ConnectionId * connid) } void -PgStopNotifyEventSource(Pg_ConnectionId * connid, int remove_pending) +PgStopNotifyEventSource(Pg_ConnectionId * connid) { /* Remove the event source */ if (connid->notifier_running) @@ -755,5 +743,5 @@ PgStopNotifyEventSource(Pg_ConnectionId * connid, int remove_pending) } /* Kill any queued Tcl events that reference this channel */ - if (remove_pending) Tcl_DeleteEvents(NotifyEventDeleteProc, (ClientData) connid); + Tcl_DeleteEvents(NotifyEventDeleteProc, (ClientData) connid); } diff --git a/src/interfaces/libpgtcl/pgtclId.h b/src/interfaces/libpgtcl/pgtclId.h index 6a918e41f8..ac99b9c6e0 100644 --- a/src/interfaces/libpgtcl/pgtclId.h +++ b/src/interfaces/libpgtcl/pgtclId.h @@ -10,7 +10,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pgtclId.h,v 1.19 2002/08/17 12:19:31 momjian Exp $ + * $Id: pgtclId.h,v 1.20 2002/08/18 01:39:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -44,7 +44,7 @@ extern PGresult *PgGetResultId(Tcl_Interp *interp, char *id); extern void PgDelResultId(Tcl_Interp *interp, char *id); extern int PgGetConnByResultId(Tcl_Interp *interp, char *resid); extern void PgStartNotifyEventSource(Pg_ConnectionId * connid); -extern void PgStopNotifyEventSource(Pg_ConnectionId * connid, int remove_pend); +extern void PgStopNotifyEventSource(Pg_ConnectionId * connid); extern void PgNotifyTransferEvents(Pg_ConnectionId * connid); extern void PgNotifyInterpDelete(ClientData clientData, Tcl_Interp *interp);