commit 80f11181966c5390a0aabbb531c20bbcd06a3860 Author: Damian Johnson atagar@torproject.org Date: Sat Jan 19 20:51:12 2013 -0800
Py_GetArgcArgv unavailable with pypy
Peer reports that stem fails with an AttributeError on pypy. Unsurprisingly this is in the process renaming voodoo - adding a try/catch to make this more relient.
Traceback (most recent call last): File "app_main.py", line 51, in run_toplevel File "first_pass.py", line 62, in <module> for router in parse_file(consensus_file): File "stem/descriptor/__init__.py", line 94, in parse_file import stem.descriptor.server_descriptor File "stem/descriptor/server_descriptor.py", line 40, in <module> import stem.version File "stem/version.py", line 65, in <module> import stem.util.system File "stem/util/system.py", line 74, in <module> Py_GetArgcArgv = ctypes.pythonapi.Py_GetArgcArgv File "/usr/lib/pypy/lib-python/2.7/ctypes/__init__.py", line 371, in __getattr__ func = self.__getitem__(name) File "/usr/lib/pypy/lib-python/2.7/ctypes/__init__.py", line 376, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) File "/usr/lib/pypy/lib_pypy/_ctypes/function.py", line 250, in __init__ ptr = self._getfuncptr([], ctypes.c_int) File "/usr/lib/pypy/lib_pypy/_ctypes/function.py", line 421, in _getfuncptr self._ptr = cdll.getfunc(self.name, ffi_argtypes, ffi_restype) AttributeError: No symbol Py_GetArgcArgv found in library <None> --- stem/util/system.py | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/stem/util/system.py b/stem/util/system.py index 2b46dad..4f9ba29 100644 --- a/stem/util/system.py +++ b/stem/util/system.py @@ -71,12 +71,18 @@ PR_SET_NAME = 15
argc_t = ctypes.POINTER(ctypes.c_char_p)
-Py_GetArgcArgv = ctypes.pythonapi.Py_GetArgcArgv -Py_GetArgcArgv.restype = None -Py_GetArgcArgv.argtypes = [ - ctypes.POINTER(ctypes.c_int), - ctypes.POINTER(argc_t), -] +# The following can fail with pypy... +# AttributeError: No symbol Py_GetArgcArgv found in library <None> + +try: + Py_GetArgcArgv = ctypes.pythonapi.Py_GetArgcArgv + Py_GetArgcArgv.restype = None + Py_GetArgcArgv.argtypes = [ + ctypes.POINTER(ctypes.c_int), + ctypes.POINTER(argc_t), + ] +except: + Py_GetArgcArgv = None
# This is both a cache for get_process_name() and tracks what we've changed our # process name to. @@ -766,6 +772,9 @@ def _set_argv(process_name): strcpy(argv[0], "new_name"); """
+ if Py_GetArgcArgv is None: + return + global _PROCESS_NAME
# both gets the current process name and initializes _MAX_NAME_LENGTH
tor-commits@lists.torproject.org