diff --git a/NEWS b/NEWS index 2017932b..704c1b0d 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,7 @@ What's new in psycopg 2.7.2 (:ticket:`#545`). - Fixed `~psycopg2.extras.ReplicationCursor.consume_stream()` *keepalive_interval* argument (:ticket:`#547`). +- Fixed random `!SystemError` upon receiving abort signal (:ticket:`#551`). - `~psycopg2.errorcodes` map updated to PostgreSQL 10 beta 1. diff --git a/psycopg/pqpath.c b/psycopg/pqpath.c index 55720724..7e8c8e8b 100644 --- a/psycopg/pqpath.c +++ b/psycopg/pqpath.c @@ -1893,8 +1893,12 @@ pq_fetch(cursorObject *curs, int no_result) Dprintf("pq_fetch: pgstatus = %s", PQresStatus(pgstatus)); /* backend status message */ - Py_XDECREF(curs->pgstatus); - curs->pgstatus = conn_text_from_chars(curs->conn, PQcmdStatus(curs->pgres)); + Py_CLEAR(curs->pgstatus); + if (!(curs->pgstatus = conn_text_from_chars( + curs->conn, PQcmdStatus(curs->pgres)))) { + ex = -1; + return ex; + } switch(pgstatus) {