aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/libpgtcl/pgtclCmds.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/libpgtcl/pgtclCmds.h')
-rw-r--r--src/interfaces/libpgtcl/pgtclCmds.h33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/interfaces/libpgtcl/pgtclCmds.h b/src/interfaces/libpgtcl/pgtclCmds.h
index f0f8513da44..052a1a0a6f2 100644
--- a/src/interfaces/libpgtcl/pgtclCmds.h
+++ b/src/interfaces/libpgtcl/pgtclCmds.h
@@ -5,7 +5,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pgtclCmds.h,v 1.9 1998/03/15 08:02:59 scrappy Exp $
+ * $Id: pgtclCmds.h,v 1.10 1998/06/16 04:10:17 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -14,13 +14,29 @@
#define PGTCLCMDS_H
#include "tcl.h"
-#include "libpq/pqcomm.h"
#include "libpq-fe.h"
-#include "libpq/libpq-fs.h"
#define RES_HARD_MAX 128
#define RES_START 16
+/*
+ * Each Pg_ConnectionId has a list of Pg_TclNotifies structs, one for each
+ * Tcl interpreter that has executed any pg_listens on the connection.
+ * We need this arrangement to be able to clean up if an interpreter is
+ * deleted while the connection remains open. A free side benefit is that
+ * multiple interpreters can be registered to listen for the same notify
+ * name. (All their callbacks will be called, but in an unspecified order.)
+ */
+
+typedef struct Pg_TclNotifies_s {
+ struct Pg_TclNotifies_s *next; /* list link */
+ Tcl_Interp *interp; /* This Tcl interpreter */
+ /* NB: if interp == NULL, the interpreter is gone but we haven't
+ * yet got round to deleting the Pg_TclNotifies structure.
+ */
+ Tcl_HashTable notify_hash; /* Active pg_listen requests */
+} Pg_TclNotifies;
+
typedef struct Pg_ConnectionId_s {
char id[32];
PGconn *conn;
@@ -31,10 +47,11 @@ typedef struct Pg_ConnectionId_s {
int res_copy; /* Query result with active copy */
int res_copyStatus; /* Copying status */
PGresult **results; /* The results */
-
- Tcl_HashTable notify_hash;
-} Pg_ConnectionId;
+ Pg_TclNotifies *notify_list; /* head of list of notify info */
+ int notifier_running; /* notify event source is live */
+
+} Pg_ConnectionId;
#define RES_COPY_NONE 0
#define RES_COPY_INPROGRESS 1
@@ -78,9 +95,5 @@ extern int Pg_lo_export(
ClientData cData, Tcl_Interp *interp, int argc, char* argv[]);
extern int Pg_listen(
ClientData cData, Tcl_Interp *interp, int argc, char* argv[]);
-extern int Pg_notifies(
- ClientData cData, Tcl_Interp *interp, int argc, char* argv[]);
-
#endif /*PGTCLCMDS_H*/
-