[pypy-commit] pypy py3.3: Fix sys.thread_info
amauryfa
noreply at buildbot.pypy.org
Sat Jun 13 11:56:40 CEST 2015
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: py3.3
Changeset: r78081:38c4a6aa6559
Date: 2015-05-02 22:38 +0200
http://bitbucket.org/pypy/pypy/changeset/38c4a6aa6559/
Log: Fix sys.thread_info
diff --git a/pypy/module/sys/__init__.py b/pypy/module/sys/__init__.py
--- a/pypy/module/sys/__init__.py
+++ b/pypy/module/sys/__init__.py
@@ -78,7 +78,7 @@
'int_info' : 'system.get_int_info(space)',
'hash_info' : 'system.get_hash_info(space)',
'float_repr_style' : 'system.get_float_repr_style(space)',
- 'thread_info' : 'system.get_thread_info(space)'
+ 'thread_info' : 'system.get_thread_info(space)',
}
if sys.platform == 'win32':
diff --git a/pypy/module/sys/system.py b/pypy/module/sys/system.py
--- a/pypy/module/sys/system.py
+++ b/pypy/module/sys/system.py
@@ -1,5 +1,6 @@
"""Information about the current system."""
import sys
+import os
from pypy.objspace.std.complexobject import HASH_IMAG
from pypy.objspace.std.floatobject import HASH_INF, HASH_NAN
@@ -91,10 +92,21 @@
# every field
if not space.config.objspace.usemodules.thread:
return None
+ from rpython.rlib import rthread
+ if rthread.RPYTHREAD_NAME == "pthread":
+ w_lock = space.wrap("semaphore" if rthread.USE_SEMAPHORES
+ else "mutex+cond")
+ if rthread.CS_GNU_LIBPTHREAD_VERSION is not None:
+ w_version = space.wrap(
+ os.confstr(rthread.CS_GNU_LIBPTHREAD_VERSION))
+ else:
+ w_version = space.w_None
+ else:
+ w_lock = space.w_None
+ w_version = space.w_None
info_w = [
- space.wrap(space.w_None),
- space.wrap(space.w_None),
- space.wrap(space.w_None),
+ space.wrap(rthread.RPYTHREAD_NAME),
+ w_lock, w_version,
]
w_thread_info = app.wget(space, "thread_info")
return space.call_function(w_thread_info, space.newtuple(info_w))
diff --git a/pypy/module/sys/test/test_sysmodule.py b/pypy/module/sys/test/test_sysmodule.py
--- a/pypy/module/sys/test/test_sysmodule.py
+++ b/pypy/module/sys/test/test_sysmodule.py
@@ -38,6 +38,9 @@
space.setattr(w_sys, space.wrap('stderr'), w_sys.get('__stderr__'))
class AppTestAppSysTests:
+ spaceconfig = {
+ "usemodules": ["thread"],
+ }
def setup_class(cls):
cls.w_appdirect = cls.space.wrap(cls.runappdirect)
@@ -201,6 +204,13 @@
exc = raises(SystemExit, sys.exit, (1, 2, 3))
assert exc.value.code == (1, 2, 3)
+ def test_sys_thread_info(self):
+ import sys
+ info = sys.thread_info
+ assert isinstance(info.name, str)
+ assert isinstance(info.lock, (str, type(None)))
+ assert isinstance(info.version, (str, type(None)))
+
class AppTestSysModulePortedFromCPython:
def setup_class(cls):
diff --git a/rpython/rlib/rthread.py b/rpython/rlib/rthread.py
--- a/rpython/rlib/rthread.py
+++ b/rpython/rlib/rthread.py
@@ -22,6 +22,16 @@
include_dirs = [translator_c_dir],
)
+class CConfig:
+ _compilation_info_ = eci
+ RPYTHREAD_NAME = rffi_platform.DefinedConstantString('RPYTHREAD_NAME')
+ USE_SEMAPHORES = rffi_platform.Defined('USE_SEMAPHORES')
+ CS_GNU_LIBPTHREAD_VERSION = rffi_platform.DefinedConstantInteger(
+ '_CS_GNU_LIBPTHREAD_VERSION')
+cconfig = rffi_platform.configure(CConfig)
+globals().update(cconfig)
+
+
def llexternal(name, args, result, **kwds):
kwds.setdefault('sandboxsafe', True)
return rffi.llexternal(name, args, result, compilation_info=eci,
diff --git a/rpython/translator/c/src/thread.h b/rpython/translator/c/src/thread.h
--- a/rpython/translator/c/src/thread.h
+++ b/rpython/translator/c/src/thread.h
@@ -12,6 +12,7 @@
} RPyLockStatus;
#ifdef _WIN32
+#define RPYTHREAD_NAME "nt"
#include "thread_nt.h"
#define inline _inline
#else
@@ -22,6 +23,7 @@
always go ahead and use them, assuming they are supported on all
platforms for which we care. If not, do some detecting again.
*/
+#define RPYTHREAD_NAME "pthread"
#include "thread_pthread.h"
#endif /* !_WIN32 */
More information about the pypy-commit
mailing list