summaryrefslogtreecommitdiffstats
path: root/Modules/_sqlite
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2009-04-05 11:47:34 (GMT)
committerGeorg Brandl <georg@python.org>2009-04-05 11:47:34 (GMT)
commitdfd734429ec24b6d55b11f48afe4a9bc8f3db730 (patch)
tree69e87b57ac63973e280d9b62c380d1ec09b60bf4 /Modules/_sqlite
parent0c0daf059bbc63047c7d0821f6e9caa161a17de0 (diff)
downloadcpython-dfd734429ec24b6d55b11f48afe4a9bc8f3db730.zip
cpython-dfd734429ec24b6d55b11f48afe4a9bc8f3db730.tar.gz
cpython-dfd734429ec24b6d55b11f48afe4a9bc8f3db730.tar.bz2
Merge revision 71222 from trunk: #5615: make it possible to configure --without-threads again.
Diffstat (limited to 'Modules/_sqlite')
-rw-r--r--Modules/_sqlite/connection.c36
-rw-r--r--Modules/_sqlite/module.c2
2 files changed, 32 insertions, 6 deletions
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index c490ded..a3170f3 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -124,8 +124,9 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject
self->detect_types = detect_types;
self->timeout = timeout;
(void)sqlite3_busy_timeout(self->db, (int)(timeout*1000));
-
+#ifdef WITH_THREAD
self->thread_ident = PyThread_get_thread_ident();
+#endif
self->check_same_thread = check_same_thread;
self->function_pinboard = PyDict_New();
@@ -510,9 +511,11 @@ void _pysqlite_func_callback(sqlite3_context* context, int argc, sqlite3_value**
PyObject* py_func;
PyObject* py_retval = NULL;
+#ifdef WITH_THREAD
PyGILState_STATE threadstate;
threadstate = PyGILState_Ensure();
+#endif
py_func = (PyObject*)sqlite3_user_data(context);
@@ -534,7 +537,9 @@ void _pysqlite_func_callback(sqlite3_context* context, int argc, sqlite3_value**
_sqlite3_result_error(context, "user-defined function raised exception", -1);
}
+#ifdef WITH_THREAD
PyGILState_Release(threadstate);
+#endif
}
static void _pysqlite_step_callback(sqlite3_context *context, int argc, sqlite3_value** params)
@@ -545,9 +550,11 @@ static void _pysqlite_step_callback(sqlite3_context *context, int argc, sqlite3_
PyObject** aggregate_instance;
PyObject* stepmethod = NULL;
+#ifdef WITH_THREAD
PyGILState_STATE threadstate;
threadstate = PyGILState_Ensure();
+#endif
aggregate_class = (PyObject*)sqlite3_user_data(context);
@@ -594,7 +601,9 @@ error:
Py_XDECREF(stepmethod);
Py_XDECREF(function_result);
+#ifdef WITH_THREAD
PyGILState_Release(threadstate);
+#endif
}
void _pysqlite_final_callback(sqlite3_context* context)
@@ -603,9 +612,11 @@ void _pysqlite_final_callback(sqlite3_context* context)
PyObject** aggregate_instance;
PyObject* aggregate_class;
+#ifdef WITH_THREAD
PyGILState_STATE threadstate;
threadstate = PyGILState_Ensure();
+#endif
aggregate_class = (PyObject*)sqlite3_user_data(context);
@@ -633,7 +644,9 @@ error:
Py_XDECREF(*aggregate_instance);
Py_XDECREF(function_result);
+#ifdef WITH_THREAD
PyGILState_Release(threadstate);
+#endif
}
void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self)
@@ -728,9 +741,11 @@ static int _authorizer_callback(void* user_arg, int action, const char* arg1, co
{
PyObject *ret;
int rc;
+#ifdef WITH_THREAD
PyGILState_STATE gilstate;
gilstate = PyGILState_Ensure();
+#endif
ret = PyObject_CallFunction((PyObject*)user_arg, "issss", action, arg1, arg2, dbname, access_attempt_source);
if (!ret) {
@@ -750,7 +765,9 @@ static int _authorizer_callback(void* user_arg, int action, const char* arg1, co
Py_DECREF(ret);
}
+#ifdef WITH_THREAD
PyGILState_Release(gilstate);
+#endif
return rc;
}
@@ -758,9 +775,11 @@ static int _progress_handler(void* user_arg)
{
int rc;
PyObject *ret;
+#ifdef WITH_THREAD
PyGILState_STATE gilstate;
gilstate = PyGILState_Ensure();
+#endif
ret = PyObject_CallFunction((PyObject*)user_arg, "");
if (!ret) {
@@ -777,7 +796,9 @@ static int _progress_handler(void* user_arg)
Py_DECREF(ret);
}
+#ifdef WITH_THREAD
PyGILState_Release(gilstate);
+#endif
return rc;
}
@@ -832,6 +853,7 @@ PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, Py
int pysqlite_check_thread(pysqlite_Connection* self)
{
+#ifdef WITH_THREAD
if (self->check_same_thread) {
if (PyThread_get_thread_ident() != self->thread_ident) {
PyErr_Format(pysqlite_ProgrammingError,
@@ -842,7 +864,7 @@ int pysqlite_check_thread(pysqlite_Connection* self)
}
}
-
+#endif
return 1;
}
@@ -1067,12 +1089,14 @@ pysqlite_collation_callback(
PyObject* callback = (PyObject*)context;
PyObject* string1 = 0;
PyObject* string2 = 0;
+#ifdef WITH_THREAD
PyGILState_STATE gilstate;
-
+#endif
PyObject* retval = NULL;
int result = 0;
-
+#ifdef WITH_THREAD
gilstate = PyGILState_Ensure();
+#endif
if (PyErr_Occurred()) {
goto finally;
@@ -1101,9 +1125,9 @@ finally:
Py_XDECREF(string1);
Py_XDECREF(string2);
Py_XDECREF(retval);
-
+#ifdef WITH_THREAD
PyGILState_Release(gilstate);
-
+#endif
return result;
}
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index 5c541fd..8e54699 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -459,7 +459,9 @@ PyMODINIT_FUNC PyInit__sqlite3(void)
* threads have already been initialized.
* (see pybsddb-users mailing list post on 2002-08-07)
*/
+#ifdef WITH_THREAD
PyEval_InitThreads();
+#endif
error:
if (PyErr_Occurred())