Skip to content

Commit 65b4e5c

Browse files
committed
[GR-16667] add missing lock Execution context enter / exit pair (callee context)
PullRequest: graalpython/558
2 parents beefdfd + ca04559 commit 65b4e5c

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/ExecutionContext.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,10 @@ public abstract static class IndirectCalleeContext {
316316
* Prepare a call from a foreign frame to a Python function.
317317
*/
318318
public static PFrame.Reference enter(PythonContext context, Object[] pArguments, RootCallTarget callTarget) {
319+
if (!context.getSingleThreadedAssumption().isValid()) {
320+
context.acquireInteropLock();
321+
}
322+
319323
Reference popTopFrameInfo = context.popTopFrameInfo();
320324
PArguments.setCallerFrameInfo(pArguments, popTopFrameInfo);
321325

@@ -344,6 +348,9 @@ public static void exit(PythonContext context, PFrame.Reference frameInfo) {
344348
// topframeref was marked as escaped, it'll be materialized at the
345349
// latest needed time
346350
context.setTopFrameInfo(frameInfo);
351+
if (!context.getSingleThreadedAssumption().isValid()) {
352+
context.releaseInteropLock();
353+
}
347354
}
348355
}
349356

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonContext.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,9 @@
3636
import java.text.MessageFormat;
3737
import java.util.HashMap;
3838
import java.util.concurrent.atomic.AtomicLong;
39-
import java.util.concurrent.locks.Lock;
4039
import java.util.concurrent.locks.ReentrantLock;
4140
import java.util.function.Supplier;
4241

43-
import com.oracle.truffle.api.TruffleFile;
4442
import org.graalvm.nativeimage.ImageInfo;
4543
import org.graalvm.options.OptionValues;
4644

@@ -50,8 +48,8 @@
5048
import com.oracle.graal.python.builtins.objects.cext.PythonNativeClass;
5149
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
5250
import com.oracle.graal.python.builtins.objects.dict.PDict;
53-
import com.oracle.graal.python.builtins.objects.list.PList;
5451
import com.oracle.graal.python.builtins.objects.frame.PFrame;
52+
import com.oracle.graal.python.builtins.objects.list.PList;
5553
import com.oracle.graal.python.builtins.objects.module.PythonModule;
5654
import com.oracle.graal.python.builtins.objects.str.PString;
5755
import com.oracle.graal.python.nodes.SpecialAttributeNames;
@@ -63,6 +61,7 @@
6361
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
6462
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
6563
import com.oracle.truffle.api.Truffle;
64+
import com.oracle.truffle.api.TruffleFile;
6665
import com.oracle.truffle.api.TruffleLanguage;
6766
import com.oracle.truffle.api.TruffleLanguage.Env;
6867
import com.oracle.truffle.api.frame.VirtualFrame;
@@ -119,7 +118,7 @@ public final class PythonContext {
119118
private static final Assumption singleNativeContext = Truffle.getRuntime().createAssumption("single native context assumption");
120119

121120
/* A lock for interop calls when this context is used by multiple threads. */
122-
private Lock interopLock;
121+
private ReentrantLock interopLock;
123122

124123
@CompilationFinal private HashingStorage.Equivalence slowPathEquivalence;
125124

@@ -604,7 +603,9 @@ public void acquireInteropLock() {
604603

605604
@TruffleBoundary
606605
public void releaseInteropLock() {
607-
interopLock.unlock();
606+
if (interopLock.isLocked()) {
607+
interopLock.unlock();
608+
}
608609
}
609610

610611
@TruffleBoundary

0 commit comments

Comments
 (0)