Skip to content

Commit

Permalink
Showing 3 changed files with 11 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -206,6 +206,7 @@ public class CoreLibrary {
private final DynamicObject systemCallErrorClass;
private final DynamicObject systemExitClass;
private final DynamicObject threadClass;
private final DynamicObjectFactory threadFactory;
private final DynamicObject threadBacktraceClass;
private final DynamicObject threadBacktraceLocationClass;
private final DynamicObject timeClass;
@@ -564,7 +565,8 @@ public CoreLibrary(RubyContext context) {

threadClass = defineClass("Thread");
threadClass.define("@abort_on_exception", false);
Layouts.CLASS.setInstanceFactoryUnsafe(threadClass, Layouts.THREAD.createThreadShape(threadClass, threadClass));
threadFactory = Layouts.THREAD.createThreadShape(threadClass, threadClass);
Layouts.CLASS.setInstanceFactoryUnsafe(threadClass, threadFactory);

threadBacktraceClass = defineClass(threadClass, objectClass, "Backtrace");
threadBacktraceLocationClass = defineClass(threadBacktraceClass, objectClass, "Location");
@@ -1306,6 +1308,10 @@ public DynamicObject getThreadClass() {
return threadClass;
}

public DynamicObjectFactory getThreadFactory() {
return threadFactory;
}

public DynamicObject getTypeErrorClass() {
return typeErrorClass;
}
Original file line number Diff line number Diff line change
@@ -92,7 +92,7 @@ public synchronized void defineFinalizer(DynamicObject object, Object callable)
if (finalizerThread == null) {
// TODO(CS): should we be running this in a real Ruby thread?

finalizerThread = ThreadManager.createRubyThread(context, context.getCoreLibrary().getThreadClass());
finalizerThread = ThreadManager.createRubyThread(context);
ThreadManager.initialize(finalizerThread, context, null, "finalizer", new Runnable() {
@Override
public void run() {
Original file line number Diff line number Diff line change
@@ -12,7 +12,6 @@
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.object.DynamicObjectFactory;
import jnr.posix.DefaultNativeTimeval;
import jnr.posix.Timeval;
import org.jruby.RubyThread.Status;
@@ -50,15 +49,15 @@ public class ThreadManager {

public ThreadManager(RubyContext context) {
this.context = context;
this.rootThread = createRubyThread(context, context.getCoreLibrary().getThreadClass());
this.rootThread = createRubyThread(context);
}

public static final InterruptMode DEFAULT_INTERRUPT_MODE = InterruptMode.IMMEDIATE;
public static final Status DEFAULT_STATUS = Status.RUN;

public static DynamicObject createRubyThread(RubyContext context, DynamicObject rubyClass) {
public static DynamicObject createRubyThread(RubyContext context) {
final DynamicObject object = Layouts.THREAD.createThread(
Layouts.CLASS.getInstanceFactory(rubyClass),
context.getCoreLibrary().getThreadFactory(),
createThreadLocals(context),
DEFAULT_INTERRUPT_MODE,
DEFAULT_STATUS,

0 comments on commit 638de88

Please sign in to comment.