[macruby-changes] [4499] MacRuby/trunk/vm.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Thu Sep 9 20:39:53 PDT 2010
Revision: 4499
http://trac.macosforge.org/projects/ruby/changeset/4499
Author: lsansonetti at apple.com
Date: 2010-09-09 20:39:53 -0700 (Thu, 09 Sep 2010)
Log Message:
-----------
look around some critical parts, to allow #load & friends to be re-entrant
Modified Paths:
--------------
MacRuby/trunk/vm.cpp
Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp 2010-09-09 01:36:41 UTC (rev 4498)
+++ MacRuby/trunk/vm.cpp 2010-09-10 03:39:53 UTC (rev 4499)
@@ -615,6 +615,8 @@
assert(func->use_empty());
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
+ RoxorCoreLock lock;
+
// Remove from cache.
std::map<Function *, IMP>::iterator iter = JITcache.find(func);
if (iter != JITcache.end()) {
@@ -3782,6 +3784,7 @@
#else
RoxorVM *vm = GET_VM();
RoxorCompiler *compiler = RoxorCompiler::shared;
+ RoxorCoreLock lock;
// Compile IR.
if (binding != NULL) {
@@ -3804,6 +3807,7 @@
//printf("interpret:\n");
//func->dump();
// If the function can be interpreted, do it, then delete the IR.
+ lock.unlock();
ret = RoxorInterpreter::shared->interpret(func,
vm->get_current_top_object(), 0);
func->eraseFromParent();
@@ -3823,6 +3827,7 @@
mnode->flags = 0;
// Execute the function.
+ lock.unlock();
ret = ((VALUE(*)(VALUE, SEL))imp)(vm->get_current_top_object(), 0);
if (inside_eval) {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100909/b683c20a/attachment.html>
More information about the macruby-changes
mailing list