summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2018-10-12 22:37:50 +0100
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2018-10-12 23:32:13 +0100
commitd29aa1c437a8ebca639fd9fa2f99fd2bc4fb500d (patch)
treec3d432b78eed9b003f913fcc4ec7a1af174de8ac
parent7619c91d62793c4424603cb8bd7116fb8cdbef20 (diff)
downloadpsycopg2-d29aa1c437a8ebca639fd9fa2f99fd2bc4fb500d.tar.gz
Fixed refcount in connection's readonly and deferrable gettersfix-790
Close #790
-rw-r--r--NEWS2
-rw-r--r--psycopg/connection_type.c2
-rwxr-xr-xtests/test_connection.py8
3 files changed, 12 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 21db9dd..0a5f3dc 100644
--- a/NEWS
+++ b/NEWS
@@ -38,6 +38,8 @@ What's new in psycopg 2.7.6
(:ticket:`#746`).
- Fixed building on modern FreeBSD versions with Python 3.7 (:ticket:`#755`).
- Fixed hang trying to :sql:`COPY` via `~cursor.execute()` (:ticket:`#781`).
+- Fixed segfault accessing the `connection.readonly` and
+ `connection.deferrable` repeatedly (:ticket:`#790`).
What's new in psycopg 2.7.5
diff --git a/psycopg/connection_type.c b/psycopg/connection_type.c
index da421c0..6ac0226 100644
--- a/psycopg/connection_type.c
+++ b/psycopg/connection_type.c
@@ -757,6 +757,7 @@ psyco_conn_readonly_get(connectionObject *self)
break;
}
+ Py_XINCREF(rv);
return rv;
}
@@ -803,6 +804,7 @@ psyco_conn_deferrable_get(connectionObject *self)
break;
}
+ Py_XINCREF(rv);
return rv;
}
diff --git a/tests/test_connection.py b/tests/test_connection.py
index 498f351..f9fdff6 100755
--- a/tests/test_connection.py
+++ b/tests/test_connection.py
@@ -803,6 +803,14 @@ class IsolationLevelsTestCase(ConnectingTestCase):
self.assertRaises(ValueError, setattr, self.conn, 'isolation_level', 5)
self.assertRaises(ValueError, setattr, self.conn, 'isolation_level', 'bah')
+ def test_attribs_segfault(self):
+ # bug #790
+ for i in range(10000):
+ self.conn.autocommit
+ self.conn.readonly
+ self.conn.deferrable
+ self.conn.isolation_level
+
class ConnectionTwoPhaseTests(ConnectingTestCase):
def setUp(self):