Close the connection if discovered bad on poll()

Conflicts:

	NEWS
This commit is contained in:
Daniele Varrazzo 2014-04-05 15:32:16 +01:00
parent cdb206d3e7
commit 71eeb9086a
2 changed files with 13 additions and 0 deletions

1
NEWS
View File

@ -26,6 +26,7 @@ What's new in psycopg 2.4.7
happens for TCP connections instead (:ticket:`#196`).
- Fixed overflow opening a lobject with an oid not fitting in a signed int
(:ticket:`#203`).
- Mark the connection closed if found broken on `poll()`.
- Fixed possible segfault in named cursors creation.
- Fixed debug build on Windows, thanks to James Emerton.

View File

@ -774,6 +774,12 @@ pq_is_busy(connectionObject *conn)
Dprintf("pq_is_busy: PQconsumeInput() failed");
pthread_mutex_unlock(&(conn->lock));
Py_BLOCK_THREADS;
/* if the libpq says pgconn is lost, close the py conn */
if (CONNECTION_BAD == PQstatus(conn->pgconn)) {
conn->closed = 2;
}
PyErr_SetString(OperationalError, PQerrorMessage(conn->pgconn));
return -1;
}
@ -803,6 +809,12 @@ pq_is_busy_locked(connectionObject *conn)
if (PQconsumeInput(conn->pgconn) == 0) {
Dprintf("pq_is_busy_locked: PQconsumeInput() failed");
/* if the libpq says pgconn is lost, close the py conn */
if (CONNECTION_BAD == PQstatus(conn->pgconn)) {
conn->closed = 2;
}
PyErr_SetString(OperationalError, PQerrorMessage(conn->pgconn));
return -1;
}