]> granicus.if.org Git - python/commitdiff
Merge revision 71222 from trunk: #5615: make it possible to configure --without-threa...
authorGeorg Brandl <georg@python.org>
Sun, 5 Apr 2009 11:47:34 +0000 (11:47 +0000)
committerGeorg Brandl <georg@python.org>
Sun, 5 Apr 2009 11:47:34 +0000 (11:47 +0000)
Modules/_io/bufferedio.c
Modules/_sqlite/connection.c
Modules/_sqlite/module.c
Objects/object.c

index 9960dba4a4971872d5fe83233a8d5082de21fca9..fb41c1d940cacc2ce078efa037cb230438e55793 100644 (file)
@@ -204,7 +204,9 @@ typedef struct {
        isn't ready for writing. */
     Py_off_t write_end;
 
+#ifdef WITH_THREAD
     PyThread_type_lock lock;
+#endif
 
     Py_ssize_t buffer_size;
     Py_ssize_t buffer_mask;
@@ -239,6 +241,7 @@ typedef struct {
 
 /* These macros protect the BufferedObject against concurrent operations. */
 
+#ifdef WITH_THREAD
 #define ENTER_BUFFERED(self) \
     Py_BEGIN_ALLOW_THREADS \
     PyThread_acquire_lock(self->lock, 1); \
@@ -246,6 +249,10 @@ typedef struct {
 
 #define LEAVE_BUFFERED(self) \
     PyThread_release_lock(self->lock);
+#else
+#define ENTER_BUFFERED(self)
+#define LEAVE_BUFFERED(self)
+#endif
 
 #define CHECK_INITIALIZED(self) \
     if (self->ok <= 0) { \
@@ -305,10 +312,12 @@ BufferedObject_dealloc(BufferedObject *self)
         PyMem_Free(self->buffer);
         self->buffer = NULL;
     }
+#ifdef WITH_THREAD
     if (self->lock) {
         PyThread_free_lock(self->lock);
         self->lock = NULL;
     }
+#endif
     Py_CLEAR(self->dict);
     Py_TYPE(self)->tp_free((PyObject *)self);
 }
@@ -565,11 +574,13 @@ _Buffered_init(BufferedObject *self)
         PyErr_NoMemory();
         return -1;
     }
+#ifdef WITH_THREAD
     self->lock = PyThread_allocate_lock();
     if (self->lock == NULL) {
         PyErr_SetString(PyExc_RuntimeError, "can't allocate read lock");
         return -1;
     }
+#endif
     /* Find out whether buffer_size is a power of 2 */
     /* XXX is this optimization useful? */
     for (n = self->buffer_size - 1; n & 1; n >>= 1)
index c490dedaa9f7aaf9d1235890ff9c47baafae8d9d..a3170f31badb97505b4d014fa1417864690406dc 100644 (file)
@@ -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;
 }
 
index 5c541fd184a84928732a81d0d8d0eaaaa82a5e7a..8e546993e6eb939563f264f592808e98ea93804d 100644 (file)
@@ -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())
index 2cb71dc216a425977633d5200318e15f1445258c..14cacb3b84dd7f59d3da1e1b0fa3cebdd2638644 100644 (file)
@@ -349,11 +349,17 @@ _PyObject_Dump(PyObject* op)
        if (op == NULL)
                fprintf(stderr, "NULL\n");
        else {
+#ifdef WITH_THREAD
                PyGILState_STATE gil;
+#endif
                fprintf(stderr, "object  : ");
+#ifdef WITH_THREAD
                gil = PyGILState_Ensure();
+#endif
                (void)PyObject_Print(op, stderr, 0);
+#ifdef WITH_THREAD
                PyGILState_Release(gil);
+#endif
                /* XXX(twouters) cast refcount to long until %zd is
                   universally available */
                fprintf(stderr, "\n"