Skip to content

Commit 640698d

Browse files
committed
Remove unused parts of reference processor now marking not involved.
1 parent 71519bd commit 640698d

File tree

3 files changed

+16
-82
lines changed

3 files changed

+16
-82
lines changed

src/main/java/org/truffleruby/core/DataObjectFinalizationService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
/** C-ext data finalizers are implemented with phantom references and reference queues, and are run in a dedicated Ruby
3535
* thread. */
36-
public class DataObjectFinalizationService extends ReferenceProcessingService<DataObjectFinalizerReference> {
36+
public class DataObjectFinalizationService extends ReferenceProcessingService<DataObjectFinalizerReference, Object> {
3737

3838
// We need a base node here, it should extend ruby base root node and implement internal root node.
3939
public static class DataObjectFinalizerRootNode extends RubyBaseRootNode implements InternalRootNode {
@@ -127,7 +127,7 @@ public final void drainFinalizationQueue(RubyContext context) {
127127

128128
@Override
129129
protected void processReference(RubyContext context, RubyLanguage language,
130-
ProcessingReference<?> finalizerReference) {
130+
PhantomProcessingReference<?, ?> finalizerReference) {
131131
super.processReference(context, language, finalizerReference);
132132

133133
runCatchingErrors(context, language, this::processReferenceInternal,

src/main/java/org/truffleruby/core/FinalizationService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
2222

2323
/** Finalizers are implemented with phantom references and reference queues, and are run in a dedicated Ruby thread. */
24-
public class FinalizationService extends ReferenceProcessingService<FinalizerReference> {
24+
public class FinalizationService extends ReferenceProcessingService<FinalizerReference, Object> {
2525

2626
static class Finalizer {
2727

@@ -87,7 +87,7 @@ public final void drainFinalizationQueue(RubyContext context) {
8787

8888
@Override
8989
protected void processReference(RubyContext context, RubyLanguage language,
90-
ProcessingReference<?> finalizerReference) {
90+
PhantomProcessingReference<?, ?> finalizerReference) {
9191
super.processReference(context, language, finalizerReference);
9292

9393
runCatchingErrors(context, language, this::processReferenceInternal, (FinalizerReference) finalizerReference);

src/main/java/org/truffleruby/core/ReferenceProcessingService.java

Lines changed: 12 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -25,86 +25,22 @@
2525

2626
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
2727

28-
public abstract class ReferenceProcessingService<R extends ReferenceProcessingService.ProcessingReference<R>> {
28+
public abstract class ReferenceProcessingService<R extends ReferenceProcessingService.PhantomProcessingReference<R, T>, T> {
2929

30-
public static interface ProcessingReference<R extends ProcessingReference<R>> {
31-
public R getPrevious();
32-
33-
public void setPrevious(R previous);
34-
35-
public R getNext();
36-
37-
public void setNext(R next);
38-
39-
public void remove();
40-
41-
public ReferenceProcessingService<R> service();
42-
}
43-
44-
public abstract static class WeakProcessingReference<R extends ProcessingReference<R>, T> extends WeakReference<T>
45-
implements ProcessingReference<R> {
46-
47-
private R next;
48-
private R previous;
49-
private ReferenceProcessingService<R> service;
50-
51-
public WeakProcessingReference(
52-
T object,
53-
ReferenceQueue<? super Object> queue,
54-
ReferenceProcessingService<R> service) {
55-
super(object, queue);
56-
this.service = service;
57-
}
58-
59-
private void check(R previous, R next) {
60-
if (next != null && next == previous) {
61-
throw CompilerDirectives.shouldNotReachHere("broken doubly-linked list of WeakProcessingReference");
62-
}
63-
}
64-
65-
public R getPrevious() {
66-
return previous;
67-
}
68-
69-
public void setPrevious(R previous) {
70-
check(previous, next);
71-
this.previous = previous;
72-
}
73-
74-
public R getNext() {
75-
return next;
76-
}
77-
78-
public void setNext(R next) {
79-
check(previous, next);
80-
this.next = next;
81-
}
82-
83-
@SuppressWarnings("unchecked")
84-
public void remove() {
85-
this.next = (R) this;
86-
this.previous = (R) this;
87-
}
88-
89-
public ReferenceProcessingService<R> service() {
90-
return service;
91-
}
92-
}
93-
94-
public abstract static class PhantomProcessingReference<R extends ProcessingReference<R>, T>
30+
public abstract static class PhantomProcessingReference<R extends PhantomProcessingReference<R, T>, T>
9531
extends
96-
PhantomReference<T> implements ProcessingReference<R> {
32+
PhantomReference<T> {
9733

9834
/** Doubly linked list of references to keep to allow the reference service to traverse them and to keep the
9935
* references alive for processing. */
10036
private R next;
10137
private R previous;
102-
private ReferenceProcessingService<R> service;
38+
private ReferenceProcessingService<R, T> service;
10339

10440
public PhantomProcessingReference(
10541
T object,
10642
ReferenceQueue<? super Object> queue,
107-
ReferenceProcessingService<R> service) {
43+
ReferenceProcessingService<R, T> service) {
10844
super(object, queue);
10945
this.service = service;
11046
}
@@ -131,7 +67,7 @@ public void remove() {
13167
this.previous = (R) this;
13268
}
13369

134-
public ReferenceProcessingService<R> service() {
70+
public ReferenceProcessingService<R,T> service() {
13571
return service;
13672
}
13773
}
@@ -147,7 +83,7 @@ public ReferenceProcessor(RubyContext context) {
14783
this.context = context;
14884
}
14985

150-
protected void processReferenceQueue(ReferenceProcessingService<?> service) {
86+
protected void processReferenceQueue(ReferenceProcessingService<?, ?> service) {
15187
if (processOnMainThread()) {
15288
drainReferenceQueues();
15389
} else {
@@ -171,7 +107,7 @@ public boolean processOnMainThread() {
171107
private static final String THREAD_NAME = "Ruby-reference-processor";
172108

173109
@TruffleBoundary
174-
protected void createProcessingThread(ReferenceProcessingService<?> service) {
110+
protected void createProcessingThread(ReferenceProcessingService<?, ?> service) {
175111
final ThreadManager threadManager = context.getThreadManager();
176112
final RubyLanguage language = context.getLanguageSlow();
177113
RubyThread newThread;
@@ -187,10 +123,10 @@ protected void createProcessingThread(ReferenceProcessingService<?> service) {
187123

188124
threadManager.initialize(newThread, DummyNode.INSTANCE, THREAD_NAME, sharingReason, () -> {
189125
while (true) {
190-
final ProcessingReference<?> reference = threadManager
126+
final PhantomProcessingReference<?, ?> reference = threadManager
191127
.runUntilResult(DummyNode.INSTANCE, () -> {
192128
try {
193-
return (ProcessingReference<?>) processingQueue.remove();
129+
return (PhantomProcessingReference<?, ?>) processingQueue.remove();
194130
} catch (InterruptedException interrupted) {
195131
if (shutdown) {
196132
throw new KillException(DummyNode.INSTANCE);
@@ -226,7 +162,7 @@ protected final void drainReferenceQueues() {
226162
final RubyLanguage language = context.getLanguageSlow();
227163
while (true) {
228164
@SuppressWarnings("unchecked")
229-
ProcessingReference<?> reference = (ProcessingReference<?>) processingQueue.poll();
165+
PhantomProcessingReference<?, ?> reference = (PhantomProcessingReference<?, ?>) processingQueue.poll();
230166

231167
if (reference == null) {
232168
break;
@@ -248,7 +184,7 @@ public ReferenceProcessingService(ReferenceQueue<Object> processingQueue) {
248184
}
249185

250186
@SuppressWarnings("unchecked")
251-
protected void processReference(RubyContext context, RubyLanguage language, ProcessingReference<?> reference) {
187+
protected void processReference(RubyContext context, RubyLanguage language, PhantomProcessingReference<?, ?> reference) {
252188
remove((R) reference);
253189
}
254190

@@ -272,7 +208,6 @@ protected void runCatchingErrors(RubyContext context, RubyLanguage language,
272208
}
273209
}
274210

275-
@TruffleBoundary
276211
protected synchronized void remove(R ref) {
277212
if (ref.getNext() == ref) {
278213
// Already removed.
@@ -302,7 +237,6 @@ protected synchronized void remove(R ref) {
302237
ref.remove();
303238
}
304239

305-
@TruffleBoundary
306240
protected synchronized void add(R newRef) {
307241
if (first != null) {
308242
newRef.setNext(first);

0 commit comments

Comments
 (0)