summaryrefslogtreecommitdiffstats
path: root/Python/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/thread.c')
-rw-r--r--Python/thread.c74
1 files changed, 64 insertions, 10 deletions
diff --git a/Python/thread.c b/Python/thread.c
index 4a9b436..1f15a22 100644
--- a/Python/thread.c
+++ b/Python/thread.c
@@ -23,12 +23,6 @@
#include <stdlib.h>
-#ifdef __sgi
-#ifndef HAVE_PTHREAD_H /* XXX Need to check in configure.in */
-#undef _POSIX_THREADS
-#endif
-#endif
-
#include "pythread.h"
#ifndef _POSIX_THREADS
@@ -101,46 +95,51 @@ PyThread_init_thread(void)
static size_t _pythread_stacksize = 0;
#ifdef SGI_THREADS
+#error SGI Irix threads are now unsupported, and code will be removed in 3.3.
#include "thread_sgi.h"
#endif
#ifdef SOLARIS_THREADS
+#define PYTHREAD_NAME "solaris"
#include "thread_solaris.h"
#endif
#ifdef SUN_LWP
+#error SunOS lightweight processes are now unsupported, and code will be removed in 3.3.
#include "thread_lwp.h"
#endif
#ifdef HAVE_PTH
+#error GNU pth threads are now unsupported, and code will be removed in 3.3.
#include "thread_pth.h"
#undef _POSIX_THREADS
#endif
#ifdef _POSIX_THREADS
+#define PYTHREAD_NAME "pthread"
#include "thread_pthread.h"
#endif
#ifdef C_THREADS
+#error Mach C Threads are now unsupported, and code will be removed in 3.3.
#include "thread_cthread.h"
#endif
#ifdef NT_THREADS
+#define PYTHREAD_NAME "nt"
#include "thread_nt.h"
#endif
#ifdef OS2_THREADS
+#define PYTHREAD_NAME "os2"
#include "thread_os2.h"
#endif
#ifdef PLAN9_THREADS
+#define PYTHREAD_NAME "plan9"
#include "thread_plan9.h"
#endif
-#ifdef ATHEOS_THREADS
-#include "thread_atheos.h"
-#endif
-
/*
#ifdef FOOBAR_THREADS
#include "thread_foobar.h"
@@ -415,3 +414,58 @@ PyThread_ReInitTLS(void)
}
#endif /* Py_HAVE_NATIVE_TLS */
+
+PyObject*
+_PyThread_Info(void)
+{
+ PyObject *info, *value;
+ int ret;
+#if (defined(_POSIX_THREADS) && defined(HAVE_CONFSTR) \
+ && defined(_CS_GNU_LIBPTHREAD_VERSION))
+ char buffer[255];
+ int len;
+#endif
+
+ info = PyDict_New();
+ if (info == NULL)
+ return NULL;
+
+ value = PyUnicode_FromString(PYTHREAD_NAME);
+ ret = PyDict_SetItemString(info, "name", value);
+ Py_DECREF(value);
+ if (ret)
+ goto error;
+
+#ifdef _POSIX_THREADS
+#ifdef USE_SEMAPHORES
+ value = PyUnicode_FromString("semaphore");
+#else
+ value = PyUnicode_FromString("mutex+cond");
+#endif
+ if (value == NULL)
+ return NULL;
+ ret = PyDict_SetItemString(info, "lock_implementation", value);
+ Py_DECREF(value);
+ if (ret)
+ goto error;
+
+#if defined(HAVE_CONFSTR) && defined(_CS_GNU_LIBPTHREAD_VERSION)
+ len = confstr(_CS_GNU_LIBPTHREAD_VERSION, buffer, sizeof(buffer));
+ if (0 < len && len < sizeof(buffer)) {
+ value = PyUnicode_DecodeFSDefaultAndSize(buffer, len-1);
+ if (value == NULL)
+ goto error;
+ ret = PyDict_SetItemString(info, "pthread_version", value);
+ Py_DECREF(value);
+ if (ret)
+ goto error;
+ }
+#endif
+#endif
+
+ return info;
+
+error:
+ Py_DECREF(info);
+ return NULL;
+}