diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2011-01-08 09:54:18 +0000 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2011-01-10 00:11:14 +0000 |
commit | 935c25730a6f62bfbe0e0796bf4eae0a0d5f61d3 (patch) | |
tree | f7eae229fd04f4cfb288bf0ca42dd558518d737a /psycopg | |
parent | 38641b93eafe90ca17770559c8be4b187ec117bb (diff) | |
download | psycopg2-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.c | 15 |
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) |