libpgtcl crashes after backend crash

Поиск
Список
Период
Сортировка
От Tom Lane
Тема libpgtcl crashes after backend crash
Дата
Msg-id 6205.901652816@sss.pgh.pa.us
обсуждение исходный текст
Список pgsql-interfaces
The attached patch fixes a problem that I seem to have introduced with
the new support for asynchronous NOTIFY in libpgtcl.  With the current
sources, if the backend disconnects unexpectedly then the tcl/tk
application coredumps when control next reaches the idle loop.
Oops.

            regards, tom lane


*** src/interfaces/libpgtcl/pgtclId.c.orig    Tue Jun 16 00:10:17 1998
--- src/interfaces/libpgtcl/pgtclId.c    Tue Jul 28 14:48:18 1998
***************
*** 471,476 ****
--- 471,477 ----
  {
      Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData;
      Tcl_File handle;
+     int pqsock;

      /* We classify SQL notifies as Tcl file events. */
      if (!(flags & TCL_FILE_EVENTS)) {
***************
*** 478,484 ****
      }

      /* Set up to watch for asynchronous data arrival on backend channel */
!     handle = Tcl_GetFile((ClientData) PQsocket(connid->conn), TCL_UNIX_FD);
      Tcl_WatchFile(handle, TCL_READABLE);
  }

--- 479,489 ----
      }

      /* Set up to watch for asynchronous data arrival on backend channel */
!     pqsock = PQsocket(connid->conn);
!     if (pqsock < 0)
!       return;
!
!     handle = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
      Tcl_WatchFile(handle, TCL_READABLE);
  }

***************
*** 488,493 ****
--- 493,499 ----
  {
      Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData;
      Tcl_File handle;
+     int pqsock;

      /* We classify SQL notifies as Tcl file events. */
      if (!(flags & TCL_FILE_EVENTS)) {
***************
*** 499,505 ****
       * We use Tcl_FileReady to avoid a useless kernel call
       * when no data is available.
       */
!     handle = Tcl_GetFile((ClientData) PQsocket(connid->conn), TCL_UNIX_FD);
      if (Tcl_FileReady(handle, TCL_READABLE) != 0) {
      PQconsumeInput(connid->conn);
      }
--- 505,515 ----
       * We use Tcl_FileReady to avoid a useless kernel call
       * when no data is available.
       */
!     pqsock = PQsocket(connid->conn);
!     if (pqsock < 0)
!       return;
!
!     handle = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
      if (Tcl_FileReady(handle, TCL_READABLE) != 0) {
      PQconsumeInput(connid->conn);
      }

В списке pgsql-interfaces по дате отправления:

Предыдущее
От: wojtek
Дата:
Сообщение: Error 'Named portals'
Следующее
От: Byron Nikolaidis
Дата:
Сообщение: Re: [INTERFACES] Error 'Named portals'