summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustavo J. A. M. Carneiro <gjc@src.gnome.org>2005-01-10 23:39:04 +0000
committerGustavo J. A. M. Carneiro <gjc@src.gnome.org>2005-01-10 23:39:04 +0000
commitbbda25e94057a8e85da788aef894f92a50b1d5f1 (patch)
tree2583dfac27a17ffa974d0b707a8a89571ea4101c
parentd8d8f32a8537e1c3a447e23269450abb2b24d323 (diff)
downloadpygobject-bbda25e94057a8e85da788aef894f92a50b1d5f1.tar.gz
pygobject-bbda25e94057a8e85da788aef894f92a50b1d5f1.tar.xz
pygobject-bbda25e94057a8e85da788aef894f92a50b1d5f1.zip
Bug 163612: segmentation fault on pygtk-demo
-rw-r--r--gobject/pygobject-private.h24
-rw-r--r--gobject/pygobject.h22
2 files changed, 26 insertions, 20 deletions
diff --git a/gobject/pygobject-private.h b/gobject/pygobject-private.h
index a9d8bd9..d826f92 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 a44f7af..22e488c 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"); \