From bbda25e94057a8e85da788aef894f92a50b1d5f1 Mon Sep 17 00:00:00 2001 From: "Gustavo J. A. M. Carneiro" Date: Mon, 10 Jan 2005 23:39:04 +0000 Subject: Bug 163612: segmentation fault on pygtk-demo --- gobject/pygobject-private.h | 24 ++++++++++++++---------- gobject/pygobject.h | 22 ++++++++++++---------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/gobject/pygobject-private.h b/gobject/pygobject-private.h index a9d8bd90..d826f92e 100644 --- a/gobject/pygobject-private.h +++ b/gobject/pygobject-private.h @@ -19,20 +19,24 @@ extern struct _PyGObject_Functions pygobject_api_functions; (* pygobject_api_functions.unblock_threads)(); \ } G_STMT_END -#if PY_VERSION_HEX < 0x020400F0 -# define pyg_threads_enabled (pygobject_api_functions.threads_enabled) -#else -# define pyg_threads_enabled (PyEval_ThreadsInitialized()) -#endif +#define pyg_threads_enabled (pygobject_api_functions.threads_enabled) + -#define pyg_gil_state_ensure() (pyg_threads_enabled? (pygobject_api_functions.gil_state_ensure()) : 0) -#define pyg_gil_state_release(state) G_STMT_START { \ - if (pyg_threads_enabled) \ +#define pyg_gil_state_ensure() (pygobject_api_functions.threads_enabled? (pygobject_api_functions.gil_state_ensure()) : 0) +#define pyg_gil_state_release(state) G_STMT_START { \ + if (pygobject_api_functions.threads_enabled) \ pygobject_api_functions.gil_state_release(state); \ } G_STMT_END -#define pyg_begin_allow_threads Py_BEGIN_ALLOW_THREADS -#define pyg_end_allow_threads Py_END_ALLOW_THREADS +#define pyg_begin_allow_threads \ + G_STMT_START { \ + PyThreadState *_save = NULL; \ + if (pygobject_api_functions.threads_enabled) \ + _save = PyEval_SaveThread(); +#define pyg_end_allow_threads \ + if (pygobject_api_functions.threads_enabled) \ + PyEval_RestoreThread(_save); \ + } G_STMT_END extern GType PY_TYPE_OBJECT; diff --git a/gobject/pygobject.h b/gobject/pygobject.h index a44f7afb..22e488c2 100644 --- a/gobject/pygobject.h +++ b/gobject/pygobject.h @@ -223,21 +223,23 @@ struct _PyGObject_Functions *_PyGObject_API; (* _PyGObject_API->unblock_threads)(); \ } G_STMT_END +#define pyg_threads_enabled (_PyGObject_API->threads_enabled) -#if PY_VERSION_HEX < 0x020400F0 -# define pyg_threads_enabled (_PyGObject_API->threads_enabled) -#else -# define pyg_threads_enabled (PyEval_ThreadsInitialized()) -#endif - -#define pyg_gil_state_ensure() (pyg_threads_enabled? (_PyGObject_API->gil_state_ensure()) : 0) +#define pyg_gil_state_ensure() (_PyGObject_API->threads_enabled? (_PyGObject_API->gil_state_ensure()) : 0) #define pyg_gil_state_release(state) G_STMT_START { \ - if (pyg_threads_enabled) \ + if (_PyGObject_API->threads_enabled) \ _PyGObject_API->gil_state_release(state); \ } G_STMT_END -#define pyg_begin_allow_threads Py_BEGIN_ALLOW_THREADS -#define pyg_end_allow_threads Py_END_ALLOW_THREADS +#define pyg_begin_allow_threads \ + G_STMT_START { \ + PyThreadState *_save = NULL; \ + if (_PyGObject_API->threads_enabled) \ + _save = PyEval_SaveThread(); +#define pyg_end_allow_threads \ + if (_PyGObject_API->threads_enabled) \ + PyEval_RestoreThread(_save); \ + } G_STMT_END #define init_pygobject() { \ PyObject *gobject = PyImport_ImportModule("gobject"); \ -- cgit v1.2.1