[pypy-commit] lang-smalltalk default: added caching for dlsym function names to speed up dynamically loaded named primitives
lwassermann
noreply at buildbot.pypy.org
Fri Jul 19 13:57:05 CEST 2013
Author: Lars Wassermann <lars.wassermann at gmail.com>
Branch:
Changeset: r506:231c592b8c33
Date: 2013-07-19 11:53 +0000
http://bitbucket.org/pypy/lang-smalltalk/changeset/231c592b8c33/
Log: added caching for dlsym function names to speed up dynamically
loaded named primitives
diff --git a/spyvm/interpreter_proxy.py b/spyvm/interpreter_proxy.py
--- a/spyvm/interpreter_proxy.py
+++ b/spyvm/interpreter_proxy.py
@@ -1031,12 +1031,16 @@
else:
module = self.loaded_modules[module_name]
- try:
- _external_function = dlsym(module, function_name)
- except KeyError:
- raise ProxyFunctionFailed
+ if function_name in module[1]:
+ return module[1][function_name]
else:
- return _external_function
+ try:
+ _external_function = dlsym(module[0], function_name)
+ except KeyError:
+ raise ProxyFunctionFailed
+ else:
+ module[1][function_name] = _external_function
+ return _external_function
def initialize_from_call(self, signature, interp, s_frame, argcount, s_method):
@@ -1130,8 +1134,9 @@
print "Failed initialization of: %s" % module_name
raise error.PrimitiveFailedError
- self.loaded_modules[module_name] = module
- return module
+ module_tuple = (module, {})
+ self.loaded_modules[module_name] = module_tuple
+ return module_tuple
except error.PrimitiveFailedError:
dlclose(module)
raise
More information about the pypy-commit
mailing list