Skip to content

Commit ab29fe0

Browse files
committed
threading: inline CreateThreadNode
1 parent 9726586 commit ab29fe0

File tree

2 files changed

+23
-89
lines changed

2 files changed

+23
-89
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ThreadModuleBuiltins.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,20 @@
5050
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5151
import com.oracle.graal.python.builtins.PythonBuiltins;
5252
import com.oracle.graal.python.builtins.objects.PNone;
53+
import com.oracle.graal.python.builtins.objects.function.PKeyword;
5354
import com.oracle.graal.python.builtins.objects.thread.PLock;
5455
import com.oracle.graal.python.builtins.objects.thread.PRLock;
5556
import com.oracle.graal.python.builtins.objects.thread.PThread;
5657
import com.oracle.graal.python.builtins.objects.type.PythonClass;
58+
import com.oracle.graal.python.nodes.argument.keywords.ExecuteKeywordStarargsNode;
59+
import com.oracle.graal.python.nodes.argument.positional.ExecutePositionalStarargsNode;
60+
import com.oracle.graal.python.nodes.call.CallNode;
5761
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5862
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5963
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
60-
import com.oracle.graal.python.nodes.thread.CreateThreadNode;
64+
import com.oracle.graal.python.runtime.PythonContext;
6165
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
66+
import com.oracle.truffle.api.TruffleLanguage;
6267
import com.oracle.truffle.api.dsl.Cached;
6368
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
6469
import com.oracle.truffle.api.dsl.NodeFactory;
@@ -153,10 +158,23 @@ long getStackSize(long stackSize) {
153158
abstract static class StartNewThreadNode extends PythonBuiltinNode {
154159
@Specialization
155160
long start(VirtualFrame frame, PythonClass cls, Object callable, Object args, Object kwargs,
156-
@Cached("create()") CreateThreadNode createThreadNode) {
157-
PThread thread = createThreadNode.execute(frame, cls, callable, args, kwargs);
158-
thread.start();
159-
return thread.getId();
161+
@Cached("create()") CallNode callNode,
162+
@Cached("create()") ExecutePositionalStarargsNode getArgsNode,
163+
@Cached("create()") ExecuteKeywordStarargsNode getKwArgsNode) {
164+
PythonContext context = getContext();
165+
TruffleLanguage.Env env = context.getEnv();
166+
167+
// TODO: python thread stack size != java thread stack size
168+
// ignore setting the stack size for the moment
169+
Thread thread = env.createThread(() -> {
170+
Object[] arguments = getArgsNode.executeWith(args);
171+
PKeyword[] keywords = getKwArgsNode.executeWith(kwargs);
172+
callNode.execute(frame, callable, arguments, keywords);
173+
}, env.getContext(), context.getThreadGroup());
174+
175+
PThread pThread = factory().createPythonThread(cls, thread);
176+
pThread.start();
177+
return pThread.getId();
160178
}
161179
}
162180
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/thread/CreateThreadNode.java

Lines changed: 0 additions & 84 deletions
This file was deleted.

0 commit comments

Comments
 (0)