[pypy-commit] pypy portable-threadlocal: Kill RPyThreadGetIdent(), and just copy the (easy) logic in module/_ssl.

arigo noreply at buildbot.pypy.org
Sat Nov 22 21:54:59 CET 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: portable-threadlocal
Changeset: r74641:d622788cadbe
Date: 2014-11-22 21:54 +0100
http://bitbucket.org/pypy/pypy/changeset/d622788cadbe/

Log:	Kill RPyThreadGetIdent(), and just copy the (easy) logic in
	module/_ssl.

diff --git a/pypy/module/_ssl/thread_lock.py b/pypy/module/_ssl/thread_lock.py
--- a/pypy/module/_ssl/thread_lock.py
+++ b/pypy/module/_ssl/thread_lock.py
@@ -24,12 +24,19 @@
 
 separate_module_source = """
 #include <openssl/crypto.h>
+#ifndef _WIN32
+# include <pthread.h>
+#endif
 
 static unsigned int _ssl_locks_count = 0;
 static struct RPyOpaque_ThreadLock *_ssl_locks;
 
 static unsigned long _ssl_thread_id_function(void) {
-    return RPyThreadGetIdent();
+#ifdef _WIN32
+    return (unsigned long)GetCurrentThreadId();
+#else
+    return (unsigned long)pthread_self();
+#endif
 }
 
 static void _ssl_thread_locking_function(int mode, int n, const char *file,
diff --git a/rpython/translator/c/src/threadlocal.c b/rpython/translator/c/src/threadlocal.c
--- a/rpython/translator/c/src/threadlocal.c
+++ b/rpython/translator/c/src/threadlocal.c
@@ -4,20 +4,12 @@
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
+#ifndef _WIN32
+# include <pthread.h>
+#endif
 #include "src/threadlocal.h"
 
 
-#ifdef _WIN32
-#  define RPyThreadGetIdent() GetCurrentThreadId()
-#else
-#  include <pthread.h>
-#  define RPyThreadGetIdent() ((long)pthread_self())
-/* xxx This abuses pthread_self() by assuming it just returns a long.
-   According to comments in CPython's source code, the platforms where
-   it is wrong are rather old nowadays. */
-#endif
-
-
 static void _RPy_ThreadLocals_Init(void *p)
 {
     memset(p, 0, sizeof(struct pypy_threadlocal_s));
@@ -25,7 +17,15 @@
     ((struct pypy_threadlocal_s *)p)->p_errno = &errno;
 #endif
 #ifdef RPY_TLOFS_thread_ident
-    ((struct pypy_threadlocal_s *)p)->thread_ident = RPyThreadGetIdent();
+    ((struct pypy_threadlocal_s *)p)->thread_ident =
+#    ifdef _WIN32
+        GetCurrentThreadId();
+#    else
+        (long)pthread_self();    /* xxx This abuses pthread_self() by
+                  assuming it just returns a integer.  According to
+                  comments in CPython's source code, the platforms
+                  where it is not the case are rather old nowadays. */
+#    endif
 #endif
     ((struct pypy_threadlocal_s *)p)->ready = 1;
 }


More information about the pypy-commit mailing list