mirror of
https://github.com/postgres/postgres.git
synced 2025-05-29 16:21:20 +03:00
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
This commit is contained in:
parent
a738478ad8
commit
c0d730460f
@ -12,7 +12,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.12 1998/08/17 03:50:26 scrappy Exp $
|
* $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.13 1998/08/22 04:34:22 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -475,6 +475,7 @@ static void Pg_Notify_SetupProc (ClientData clientData, int flags)
|
|||||||
{
|
{
|
||||||
Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData;
|
Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData;
|
||||||
Tcl_File handle;
|
Tcl_File handle;
|
||||||
|
int pqsock;
|
||||||
|
|
||||||
/* We classify SQL notifies as Tcl file events. */
|
/* We classify SQL notifies as Tcl file events. */
|
||||||
if (!(flags & TCL_FILE_EVENTS)) {
|
if (!(flags & TCL_FILE_EVENTS)) {
|
||||||
@ -482,7 +483,11 @@ static void Pg_Notify_SetupProc (ClientData clientData, int flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set up to watch for asynchronous data arrival on backend channel */
|
/* Set up to watch for asynchronous data arrival on backend channel */
|
||||||
handle = Tcl_GetFile((ClientData) PQsocket(connid->conn), TCL_UNIX_FD);
|
pqsock = PQsocket(connid->conn);
|
||||||
|
if (pqsock < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
handle = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
|
||||||
Tcl_WatchFile(handle, TCL_READABLE);
|
Tcl_WatchFile(handle, TCL_READABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -492,6 +497,7 @@ static void Pg_Notify_CheckProc (ClientData clientData, int flags)
|
|||||||
{
|
{
|
||||||
Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData;
|
Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData;
|
||||||
Tcl_File handle;
|
Tcl_File handle;
|
||||||
|
int pqsock;
|
||||||
|
|
||||||
/* We classify SQL notifies as Tcl file events. */
|
/* We classify SQL notifies as Tcl file events. */
|
||||||
if (!(flags & TCL_FILE_EVENTS)) {
|
if (!(flags & TCL_FILE_EVENTS)) {
|
||||||
@ -503,7 +509,11 @@ static void Pg_Notify_CheckProc (ClientData clientData, int flags)
|
|||||||
* We use Tcl_FileReady to avoid a useless kernel call
|
* We use Tcl_FileReady to avoid a useless kernel call
|
||||||
* when no data is available.
|
* when no data is available.
|
||||||
*/
|
*/
|
||||||
handle = Tcl_GetFile((ClientData) PQsocket(connid->conn), TCL_UNIX_FD);
|
pqsock = PQsocket(connid->conn);
|
||||||
|
if (pqsock < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
handle = Tcl_GetFile((ClientData) pqsock, TCL_UNIX_FD);
|
||||||
if (Tcl_FileReady(handle, TCL_READABLE) != 0) {
|
if (Tcl_FileReady(handle, TCL_READABLE) != 0) {
|
||||||
PQconsumeInput(connid->conn);
|
PQconsumeInput(connid->conn);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user