From e6872eb41710f14d35616b168f21d85c96d26ff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerhard=20H=C3=A4ring?= Date: Fri, 12 Sep 2008 22:33:22 +0000 Subject: Issue #3846: Release GIL during calls to sqlite3_prepare. This improves concurrent access to the same database file from multiple threads/processes. --- Modules/_sqlite/statement.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Modules/_sqlite/statement.c') diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c index dae83d4586..f200c56399 100644 --- a/Modules/_sqlite/statement.c +++ b/Modules/_sqlite/statement.c @@ -79,11 +79,13 @@ int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* con sql_cstr = PyString_AsString(sql_str); + Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(connection->db, sql_cstr, -1, &self->st, &tail); + Py_END_ALLOW_THREADS self->db = connection->db; @@ -328,11 +330,13 @@ int pysqlite_statement_recompile(pysqlite_Statement* self, PyObject* params) sql_cstr = PyString_AsString(self->sql); + Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->db, sql_cstr, -1, &new_st, &tail); + Py_END_ALLOW_THREADS if (rc == SQLITE_OK) { /* The efficient sqlite3_transfer_bindings is only available in SQLite -- cgit v1.2.1