Author: Brian Kearns <bdkea...@gmail.com> Branch: Changeset: r62029:3bf4d0b6f5e8 Date: 2013-03-04 17:49 -0500 http://bitbucket.org/pypy/pypy/changeset/3bf4d0b6f5e8/
Log: test and fix for _sqlite3.Connection.__del__ (fixes issue 1325) diff --git a/lib_pypy/_sqlite3.py b/lib_pypy/_sqlite3.py --- a/lib_pypy/_sqlite3.py +++ b/lib_pypy/_sqlite3.py @@ -343,6 +343,10 @@ if check_same_thread: self.thread_ident = thread_get_ident() + def __del__(self): + if self.db: + sqlite.sqlite3_close(self.db) + def _get_exception(self, error_code = None): if error_code is None: error_code = sqlite.sqlite3_errcode(self.db) diff --git a/pypy/module/test_lib_pypy/test_sqlite3.py b/pypy/module/test_lib_pypy/test_sqlite3.py --- a/pypy/module/test_lib_pypy/test_sqlite3.py +++ b/pypy/module/test_lib_pypy/test_sqlite3.py @@ -29,3 +29,20 @@ con = Connection(":memory:") e = pytest.raises(_sqlite3.ProgrammingError, "con.cursor()") assert '__init__' in e.value.message + +@pytest.mark.skipif("not hasattr(sys, 'pypy_translation_info')") +def test_connection_del(tmpdir): + """For issue1325.""" + import gc + + def open_many(cleanup): + con = [] + for i in range(1024): + con.append(_sqlite3.connect(str(tmpdir.join('test.db')))) + if cleanup: + con[i] = None + gc.collect(); gc.collect() + + pytest.raises(_sqlite3.OperationalError, open_many, False) + gc.collect(); gc.collect() + open_many(True) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit