summaryrefslogtreecommitdiff
path: root/psycopg
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2011-01-08 09:54:18 +0000
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2011-01-10 00:11:14 +0000
commit935c25730a6f62bfbe0e0796bf4eae0a0d5f61d3 (patch)
treef7eae229fd04f4cfb288bf0ca42dd558518d737a /psycopg
parent38641b93eafe90ca17770559c8be4b187ec117bb (diff)
downloadpsycopg2-935c25730a6f62bfbe0e0796bf4eae0a0d5f61d3.tar.gz
Fixed segfault in large object close.
Check that the connection is not closed/faulty before attempting lo_close.
Diffstat (limited to 'psycopg')
-rw-r--r--psycopg/lobject_int.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/psycopg/lobject_int.c b/psycopg/lobject_int.c
index bac2afb..c3ae662 100644
--- a/psycopg/lobject_int.c
+++ b/psycopg/lobject_int.c
@@ -129,6 +129,21 @@ lobject_close_locked(lobjectObject *self, char **error)
{
int retvalue;
+ Dprintf("lobject_close_locked: conn->closed %ld", self->conn->closed);
+ switch (self->conn->closed) {
+ case 0:
+ /* Connection is open, go ahead */
+ break;
+ case 1:
+ /* Connection is closed, return a success */
+ return 0;
+ break;
+ default:
+ PyErr_SetString(OperationalError, "the connection is broken");
+ return -1;
+ break;
+ }
+
if (self->conn->isolation_level == ISOLATION_LEVEL_AUTOCOMMIT ||
self->conn->mark != self->mark ||
self->fd == -1)