mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-22 17:06:33 +03:00
Release the GIL around PQgetResult calls after COPY
It should fix ticket #140.
This commit is contained in:
parent
896ad7c827
commit
362c2ae597
1
NEWS
1
NEWS
|
@ -25,6 +25,7 @@ What's new in psycopg 2.4.6
|
||||||
when a connection string is specified as well (ticket #131).
|
when a connection string is specified as well (ticket #131).
|
||||||
- Discard any result produced by 'executemany()' (ticket #133).
|
- Discard any result produced by 'executemany()' (ticket #133).
|
||||||
- Fixed pickling of FixedOffsetTimezone objects (ticket #135).
|
- Fixed pickling of FixedOffsetTimezone objects (ticket #135).
|
||||||
|
- Release the GIL around PQgetResult calls after COPY (ticket #140).
|
||||||
- 'errorcodes' map updated to PostgreSQL 9.2.
|
- 'errorcodes' map updated to PostgreSQL 9.2.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -986,7 +986,7 @@ pq_send_query(connectionObject *conn, const char *query)
|
||||||
|
|
||||||
/* Return the last result available on the connection.
|
/* Return the last result available on the connection.
|
||||||
*
|
*
|
||||||
* The function will block will block only if a command is active and the
|
* The function will block only if a command is active and the
|
||||||
* necessary response data has not yet been read by PQconsumeInput.
|
* necessary response data has not yet been read by PQconsumeInput.
|
||||||
*
|
*
|
||||||
* The result should be disposed using PQclear()
|
* The result should be disposed using PQclear()
|
||||||
|
@ -1312,9 +1312,9 @@ _pq_copy_in_v3(cursorObject *curs)
|
||||||
res = PQputCopyEnd(curs->conn->pgconn, "error in .read() call");
|
res = PQputCopyEnd(curs->conn->pgconn, "error in .read() call");
|
||||||
|
|
||||||
IFCLEARPGRES(curs->pgres);
|
IFCLEARPGRES(curs->pgres);
|
||||||
|
|
||||||
Dprintf("_pq_copy_in_v3: copy ended; res = %d", res);
|
Dprintf("_pq_copy_in_v3: copy ended; res = %d", res);
|
||||||
|
|
||||||
/* if the result is -1 we should not even try to get a result from the
|
/* if the result is -1 we should not even try to get a result from the
|
||||||
bacause that will lock the current thread forever */
|
bacause that will lock the current thread forever */
|
||||||
if (res == -1) {
|
if (res == -1) {
|
||||||
|
@ -1326,7 +1326,13 @@ _pq_copy_in_v3(cursorObject *curs)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* and finally we grab the operation result from the backend */
|
/* and finally we grab the operation result from the backend */
|
||||||
while ((curs->pgres = PQgetResult(curs->conn->pgconn)) != NULL) {
|
for (;;) {
|
||||||
|
Py_BEGIN_ALLOW_THREADS;
|
||||||
|
curs->pgres = PQgetResult(curs->conn->pgconn);
|
||||||
|
Py_END_ALLOW_THREADS;
|
||||||
|
|
||||||
|
if (NULL == curs->pgres)
|
||||||
|
break;
|
||||||
if (PQresultStatus(curs->pgres) == PGRES_FATAL_ERROR)
|
if (PQresultStatus(curs->pgres) == PGRES_FATAL_ERROR)
|
||||||
pq_raise(curs->conn, curs, NULL);
|
pq_raise(curs->conn, curs, NULL);
|
||||||
IFCLEARPGRES(curs->pgres);
|
IFCLEARPGRES(curs->pgres);
|
||||||
|
@ -1396,7 +1402,13 @@ _pq_copy_out_v3(cursorObject *curs)
|
||||||
|
|
||||||
/* and finally we grab the operation result from the backend */
|
/* and finally we grab the operation result from the backend */
|
||||||
IFCLEARPGRES(curs->pgres);
|
IFCLEARPGRES(curs->pgres);
|
||||||
while ((curs->pgres = PQgetResult(curs->conn->pgconn)) != NULL) {
|
for (;;) {
|
||||||
|
Py_BEGIN_ALLOW_THREADS;
|
||||||
|
curs->pgres = PQgetResult(curs->conn->pgconn);
|
||||||
|
Py_END_ALLOW_THREADS;
|
||||||
|
|
||||||
|
if (NULL == curs->pgres)
|
||||||
|
break;
|
||||||
if (PQresultStatus(curs->pgres) == PGRES_FATAL_ERROR)
|
if (PQresultStatus(curs->pgres) == PGRES_FATAL_ERROR)
|
||||||
pq_raise(curs->conn, curs, NULL);
|
pq_raise(curs->conn, curs, NULL);
|
||||||
IFCLEARPGRES(curs->pgres);
|
IFCLEARPGRES(curs->pgres);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user