Use PyThreadState_GetDict, avoid Python internals
authorCampbell Barton <ideasman42@gmail.com>
Sat, 26 Sep 2015 01:58:31 +0000 (11:58 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 26 Sep 2015 02:02:17 +0000 (12:02 +1000)
Works around problems caused by exposing Py internals (Py_BUILD_CORE).

- Build error with GCC, Py3.6 & OpenMP
- Linking error on MSVC

source/blender/python/generic/py_capi_utils.c

index 78be5e558dba9e653ab0bfee607753d2a0209682..e833dba04c81cdbce0000812a4724e982363625d 100644 (file)
  * BLI_string_utf8() for unicode conversion.
  */
 
-/* TODO, resolve linking errors on win32 */
-#ifndef _WIN32
-/* needed for Py3.6+ to access Py_PyThreadState_Current */
-#define Py_BUILD_CORE
-#endif
-
 #include <Python.h>
 #include <frameobject.h>
 
@@ -671,8 +665,8 @@ void PyC_SetHomePath(const char *py_path_bundle)
 
 bool PyC_IsInterpreterActive(void)
 {
-       /* expanded PyThreadState_GET which won't throw an exception */
-       return (((PyThreadState *)_Py_atomic_load_relaxed(&_PyThreadState_Current)) != NULL);
+       /* instead of PyThreadState_Get, which calls Py_FatalError */
+       return (PyThreadState_GetDict() != NULL);
 }
 
 /* Would be nice if python had this built in