Kaydet (Commit) d3eaa745 authored tarafından Georg Brandl's avatar Georg Brandl

#5615: make it possible to configure --without-threads again.

üst 1e566cec
...@@ -168,8 +168,9 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject ...@@ -168,8 +168,9 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject
self->detect_types = detect_types; self->detect_types = detect_types;
self->timeout = timeout; self->timeout = timeout;
(void)sqlite3_busy_timeout(self->db, (int)(timeout*1000)); (void)sqlite3_busy_timeout(self->db, (int)(timeout*1000));
#ifdef WITH_THREAD
self->thread_ident = PyThread_get_thread_ident(); self->thread_ident = PyThread_get_thread_ident();
#endif
self->check_same_thread = check_same_thread; self->check_same_thread = check_same_thread;
self->function_pinboard = PyDict_New(); self->function_pinboard = PyDict_New();
...@@ -585,9 +586,11 @@ void _pysqlite_func_callback(sqlite3_context* context, int argc, sqlite3_value** ...@@ -585,9 +586,11 @@ void _pysqlite_func_callback(sqlite3_context* context, int argc, sqlite3_value**
PyObject* py_func; PyObject* py_func;
PyObject* py_retval = NULL; PyObject* py_retval = NULL;
#ifdef WITH_THREAD
PyGILState_STATE threadstate; PyGILState_STATE threadstate;
threadstate = PyGILState_Ensure(); threadstate = PyGILState_Ensure();
#endif
py_func = (PyObject*)sqlite3_user_data(context); py_func = (PyObject*)sqlite3_user_data(context);
...@@ -609,7 +612,9 @@ void _pysqlite_func_callback(sqlite3_context* context, int argc, sqlite3_value** ...@@ -609,7 +612,9 @@ void _pysqlite_func_callback(sqlite3_context* context, int argc, sqlite3_value**
_sqlite3_result_error(context, "user-defined function raised exception", -1); _sqlite3_result_error(context, "user-defined function raised exception", -1);
} }
#ifdef WITH_THREAD
PyGILState_Release(threadstate); PyGILState_Release(threadstate);
#endif
} }
static void _pysqlite_step_callback(sqlite3_context *context, int argc, sqlite3_value** params) static void _pysqlite_step_callback(sqlite3_context *context, int argc, sqlite3_value** params)
...@@ -620,9 +625,11 @@ static void _pysqlite_step_callback(sqlite3_context *context, int argc, sqlite3_ ...@@ -620,9 +625,11 @@ static void _pysqlite_step_callback(sqlite3_context *context, int argc, sqlite3_
PyObject** aggregate_instance; PyObject** aggregate_instance;
PyObject* stepmethod = NULL; PyObject* stepmethod = NULL;
#ifdef WITH_THREAD
PyGILState_STATE threadstate; PyGILState_STATE threadstate;
threadstate = PyGILState_Ensure(); threadstate = PyGILState_Ensure();
#endif
aggregate_class = (PyObject*)sqlite3_user_data(context); aggregate_class = (PyObject*)sqlite3_user_data(context);
...@@ -669,7 +676,9 @@ error: ...@@ -669,7 +676,9 @@ error:
Py_XDECREF(stepmethod); Py_XDECREF(stepmethod);
Py_XDECREF(function_result); Py_XDECREF(function_result);
#ifdef WITH_THREAD
PyGILState_Release(threadstate); PyGILState_Release(threadstate);
#endif
} }
void _pysqlite_final_callback(sqlite3_context* context) void _pysqlite_final_callback(sqlite3_context* context)
...@@ -678,9 +687,11 @@ void _pysqlite_final_callback(sqlite3_context* context) ...@@ -678,9 +687,11 @@ void _pysqlite_final_callback(sqlite3_context* context)
PyObject** aggregate_instance; PyObject** aggregate_instance;
PyObject* aggregate_class; PyObject* aggregate_class;
#ifdef WITH_THREAD
PyGILState_STATE threadstate; PyGILState_STATE threadstate;
threadstate = PyGILState_Ensure(); threadstate = PyGILState_Ensure();
#endif
aggregate_class = (PyObject*)sqlite3_user_data(context); aggregate_class = (PyObject*)sqlite3_user_data(context);
...@@ -708,7 +719,9 @@ error: ...@@ -708,7 +719,9 @@ error:
Py_XDECREF(*aggregate_instance); Py_XDECREF(*aggregate_instance);
Py_XDECREF(function_result); Py_XDECREF(function_result);
#ifdef WITH_THREAD
PyGILState_Release(threadstate); PyGILState_Release(threadstate);
#endif
} }
void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self) void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self)
...@@ -803,9 +816,11 @@ static int _authorizer_callback(void* user_arg, int action, const char* arg1, co ...@@ -803,9 +816,11 @@ static int _authorizer_callback(void* user_arg, int action, const char* arg1, co
{ {
PyObject *ret; PyObject *ret;
int rc; int rc;
#ifdef WITH_THREAD
PyGILState_STATE gilstate; PyGILState_STATE gilstate;
gilstate = PyGILState_Ensure(); gilstate = PyGILState_Ensure();
#endif
ret = PyObject_CallFunction((PyObject*)user_arg, "issss", action, arg1, arg2, dbname, access_attempt_source); ret = PyObject_CallFunction((PyObject*)user_arg, "issss", action, arg1, arg2, dbname, access_attempt_source);
if (!ret) { if (!ret) {
...@@ -825,7 +840,9 @@ static int _authorizer_callback(void* user_arg, int action, const char* arg1, co ...@@ -825,7 +840,9 @@ static int _authorizer_callback(void* user_arg, int action, const char* arg1, co
Py_DECREF(ret); Py_DECREF(ret);
} }
#ifdef WITH_THREAD
PyGILState_Release(gilstate); PyGILState_Release(gilstate);
#endif
return rc; return rc;
} }
...@@ -833,9 +850,11 @@ static int _progress_handler(void* user_arg) ...@@ -833,9 +850,11 @@ static int _progress_handler(void* user_arg)
{ {
int rc; int rc;
PyObject *ret; PyObject *ret;
#ifdef WITH_THREAD
PyGILState_STATE gilstate; PyGILState_STATE gilstate;
gilstate = PyGILState_Ensure(); gilstate = PyGILState_Ensure();
#endif
ret = PyObject_CallFunction((PyObject*)user_arg, ""); ret = PyObject_CallFunction((PyObject*)user_arg, "");
if (!ret) { if (!ret) {
...@@ -852,7 +871,9 @@ static int _progress_handler(void* user_arg) ...@@ -852,7 +871,9 @@ static int _progress_handler(void* user_arg)
Py_DECREF(ret); Py_DECREF(ret);
} }
#ifdef WITH_THREAD
PyGILState_Release(gilstate); PyGILState_Release(gilstate);
#endif
return rc; return rc;
} }
...@@ -907,6 +928,7 @@ PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, Py ...@@ -907,6 +928,7 @@ PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, Py
int pysqlite_check_thread(pysqlite_Connection* self) int pysqlite_check_thread(pysqlite_Connection* self)
{ {
#ifdef WITH_THREAD
if (self->check_same_thread) { if (self->check_same_thread) {
if (PyThread_get_thread_ident() != self->thread_ident) { if (PyThread_get_thread_ident() != self->thread_ident) {
PyErr_Format(pysqlite_ProgrammingError, PyErr_Format(pysqlite_ProgrammingError,
...@@ -917,7 +939,7 @@ int pysqlite_check_thread(pysqlite_Connection* self) ...@@ -917,7 +939,7 @@ int pysqlite_check_thread(pysqlite_Connection* self)
} }
} }
#endif
return 1; return 1;
} }
...@@ -1139,12 +1161,14 @@ pysqlite_collation_callback( ...@@ -1139,12 +1161,14 @@ pysqlite_collation_callback(
PyObject* callback = (PyObject*)context; PyObject* callback = (PyObject*)context;
PyObject* string1 = 0; PyObject* string1 = 0;
PyObject* string2 = 0; PyObject* string2 = 0;
#ifdef WITH_THREAD
PyGILState_STATE gilstate; PyGILState_STATE gilstate;
#endif
PyObject* retval = NULL; PyObject* retval = NULL;
int result = 0; int result = 0;
#ifdef WITH_THREAD
gilstate = PyGILState_Ensure(); gilstate = PyGILState_Ensure();
#endif
if (PyErr_Occurred()) { if (PyErr_Occurred()) {
goto finally; goto finally;
...@@ -1173,9 +1197,9 @@ finally: ...@@ -1173,9 +1197,9 @@ finally:
Py_XDECREF(string1); Py_XDECREF(string1);
Py_XDECREF(string2); Py_XDECREF(string2);
Py_XDECREF(retval); Py_XDECREF(retval);
#ifdef WITH_THREAD
PyGILState_Release(gilstate); PyGILState_Release(gilstate);
#endif
return result; return result;
} }
......
...@@ -445,7 +445,9 @@ PyMODINIT_FUNC init_sqlite3(void) ...@@ -445,7 +445,9 @@ PyMODINIT_FUNC init_sqlite3(void)
* threads have already been initialized. * threads have already been initialized.
* (see pybsddb-users mailing list post on 2002-08-07) * (see pybsddb-users mailing list post on 2002-08-07)
*/ */
#ifdef WITH_THREAD
PyEval_InitThreads(); PyEval_InitThreads();
#endif
error: error:
if (PyErr_Occurred()) if (PyErr_Occurred())
......
...@@ -336,11 +336,17 @@ void _PyObject_Dump(PyObject* op) ...@@ -336,11 +336,17 @@ void _PyObject_Dump(PyObject* op)
if (op == NULL) if (op == NULL)
fprintf(stderr, "NULL\n"); fprintf(stderr, "NULL\n");
else { else {
#ifdef WITH_THREAD
PyGILState_STATE gil; PyGILState_STATE gil;
#endif
fprintf(stderr, "object : "); fprintf(stderr, "object : ");
#ifdef WITH_THREAD
gil = PyGILState_Ensure(); gil = PyGILState_Ensure();
#endif
(void)PyObject_Print(op, stderr, 0); (void)PyObject_Print(op, stderr, 0);
#ifdef WITH_THREAD
PyGILState_Release(gil); PyGILState_Release(gil);
#endif
/* XXX(twouters) cast refcount to long until %zd is /* XXX(twouters) cast refcount to long until %zd is
universally available */ universally available */
fprintf(stderr, "\n" fprintf(stderr, "\n"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment