From 0a33ed01f556316e6480dba4d04198260568b4dd Mon Sep 17 00:00:00 2001 From: Federico Di Gregorio Date: Thu, 8 Apr 2010 18:42:20 +0200 Subject: [PATCH] Added test for refcounting/gc bug reported by Michael Tharp --- psycopg2.cproj | 5 ++++- tests/bug_gc.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100755 tests/bug_gc.py diff --git a/psycopg2.cproj b/psycopg2.cproj index 88f6bcf7..8a131102 100644 --- a/psycopg2.cproj +++ b/psycopg2.cproj @@ -1,5 +1,5 @@ - + Debug AnyCPU @@ -170,6 +170,9 @@ + + + diff --git a/tests/bug_gc.py b/tests/bug_gc.py new file mode 100755 index 00000000..89d90d26 --- /dev/null +++ b/tests/bug_gc.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python + +import psycopg2 +import psycopg2.extensions +import time +import unittest +import gc + +import sys +if sys.version_info < (3,): + import tests +else: + import py3tests as tests + +class StolenReferenceTestCase(unittest.TestCase): + def test_stolen_reference_bug(self): + def fish(val, cur): + gc.collect() + return 42 + conn = psycopg2.connect(tests.dsn) + UUID = psycopg2.extensions.new_type((2950,), "UUID", fish) + psycopg2.extensions.register_type(UUID, conn) + curs = conn.cursor() + curs.execute("select 'b5219e01-19ab-4994-b71e-149225dc51e4'::uuid") + curs.fetchone() + +def test_suite(): + return unittest.TestLoader().loadTestsFromName(__name__) + +if __name__ == "__main__": + unittest.main()