Skip to content

Commit ac84e5a

Browse files
committed
extend builtin SemLock type
1 parent 5bfb8c2 commit ac84e5a

File tree

5 files changed

+57
-4
lines changed

5 files changed

+57
-4
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@
158158
import com.oracle.graal.python.builtins.objects.superobject.SuperBuiltins;
159159
import com.oracle.graal.python.builtins.objects.thread.LockBuiltins;
160160
import com.oracle.graal.python.builtins.objects.thread.RLockBuiltins;
161+
import com.oracle.graal.python.builtins.objects.thread.SemLockBuiltins;
161162
import com.oracle.graal.python.builtins.objects.thread.ThreadBuiltins;
162163
import com.oracle.graal.python.builtins.objects.traceback.TracebackBuiltins;
163164
import com.oracle.graal.python.builtins.objects.tuple.TupleBuiltins;
@@ -373,6 +374,7 @@ private static final PythonBuiltins[] initializeBuiltins() {
373374
new LZMACompressorBuiltins(),
374375
new LZMADecompressorBuiltins(),
375376
new MultiprocessingModuleBuiltins(),
377+
new SemLockBuiltins(),
376378
new GraalPythonModuleBuiltins()));
377379
if (!TruffleOptions.AOT) {
378380
ServiceLoader<PythonBuiltins> providers = ServiceLoader.load(PythonBuiltins.class, Python3Core.class.getClassLoader());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ PSemLock construct(LazyPythonClass cls, Object kindObj, Object valueObj, Object
110110
semaphorePut(lang, semaphore, name);
111111
}
112112
}
113-
return factory().createSemLock(cls, kind, semaphore);
113+
return factory().createSemLock(cls, name, kind, semaphore);
114114
}
115115

116116
@TruffleBoundary

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/thread/PSemLock.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,14 @@ public final class PSemLock extends AbstractPythonLock {
5252

5353
private final Semaphore semaphore;
5454
private final int kind;
55+
private final String name;
5556

5657
private int lastThreadID = -1;
5758
private int count;
5859

59-
public PSemLock(LazyPythonClass cls, int kind, Semaphore sharedSemaphore) {
60+
public PSemLock(LazyPythonClass cls, String name, int kind, Semaphore sharedSemaphore) {
6061
super(cls);
62+
this.name = name;
6163
this.semaphore = sharedSemaphore;
6264
this.kind = kind;
6365
}
@@ -128,4 +130,8 @@ public boolean isMine() {
128130
public int getKind() {
129131
return kind;
130132
}
133+
134+
public String getName() {
135+
return name;
136+
}
131137
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/thread/SemLockBuiltins.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5656
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
5757
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
58+
import com.oracle.graal.python.runtime.PythonCore;
59+
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5860
import com.oracle.truffle.api.dsl.Cached;
5961
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
6062
import com.oracle.truffle.api.dsl.NodeFactory;
@@ -69,6 +71,12 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
6971
return SemLockBuiltinsFactory.getFactories();
7072
}
7173

74+
@Override
75+
public void initialize(PythonCore core) {
76+
builtinConstants.put("SEM_VALUE_MAX", Integer.MAX_VALUE);
77+
super.initialize(core);
78+
}
79+
7280
@Builtin(name = "_count", minNumOfPositionalArgs = 1)
7381
@GenerateNodeFactory
7482
abstract static class CountNode extends PythonUnaryBuiltinNode {
@@ -96,6 +104,43 @@ int getValue(PSemLock self) {
96104
}
97105
}
98106

107+
@Builtin(name = "handle", minNumOfPositionalArgs = 1, isGetter = true)
108+
@GenerateNodeFactory
109+
abstract static class GetHandleNode extends PythonUnaryBuiltinNode {
110+
@Specialization
111+
@TruffleBoundary
112+
int getHandle(PSemLock self) {
113+
return self.hashCode();
114+
}
115+
}
116+
117+
@Builtin(name = "name", minNumOfPositionalArgs = 1, isGetter = true)
118+
@GenerateNodeFactory
119+
abstract static class GetNameNode extends PythonUnaryBuiltinNode {
120+
@Specialization
121+
Object getName(@SuppressWarnings("unused") PSemLock self) {
122+
return PNone.NONE;
123+
}
124+
}
125+
126+
@Builtin(name = "maxvalue", minNumOfPositionalArgs = 1, isGetter = true)
127+
@GenerateNodeFactory
128+
abstract static class GetMaxValue extends PythonUnaryBuiltinNode {
129+
@Specialization
130+
Object getMax(@SuppressWarnings("unused") PSemLock self) {
131+
return Integer.MAX_VALUE;
132+
}
133+
}
134+
135+
@Builtin(name = "kind", minNumOfPositionalArgs = 1, isGetter = true)
136+
@GenerateNodeFactory
137+
abstract static class GetKindNode extends PythonUnaryBuiltinNode {
138+
@Specialization
139+
int getKind(PSemLock self) {
140+
return self.getKind();
141+
}
142+
}
143+
99144
@Builtin(name = "acquire", minNumOfPositionalArgs = 1, parameterNames = {"self", "blocking", "timeout"})
100145
@GenerateNodeFactory
101146
abstract static class AcquireNode extends PythonTernaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/object/PythonObjectFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -824,8 +824,8 @@ public PThread createPythonThread(LazyPythonClass cls, Thread thread) {
824824
return trace(new PThread(cls, thread));
825825
}
826826

827-
public PSemLock createSemLock(LazyPythonClass cls, int kind, Semaphore sharedSemaphore) {
828-
return trace(new PSemLock(cls, kind, sharedSemaphore));
827+
public PSemLock createSemLock(LazyPythonClass cls, String name, int kind, Semaphore sharedSemaphore) {
828+
return trace(new PSemLock(cls, name, kind, sharedSemaphore));
829829
}
830830

831831
public PScandirIterator createScandirIterator(LazyPythonClass cls, String path, DirectoryStream<TruffleFile> next) {

0 commit comments

Comments
 (0)