|
9 | 9 | */
|
10 | 10 | package org.truffleruby.core;
|
11 | 11 |
|
12 |
| -import java.lang.ref.PhantomReference; |
13 | 12 | import java.lang.ref.ReferenceQueue;
|
14 | 13 | import java.util.Collection;
|
15 | 14 | import java.util.Deque;
|
16 | 15 | import java.util.LinkedList;
|
17 | 16 | import java.util.Set;
|
18 | 17 |
|
19 | 18 | import org.truffleruby.RubyContext;
|
| 19 | +import org.truffleruby.core.ReferenceProcessingService.PhantomProcessingReference; |
20 | 20 |
|
21 | 21 | import com.oracle.truffle.api.object.DynamicObject;
|
22 | 22 | import org.truffleruby.language.objects.ObjectGraphNode;
|
@@ -52,38 +52,16 @@ public DynamicObject getRoot() {
|
52 | 52 | }
|
53 | 53 | }
|
54 | 54 |
|
55 |
| - public static class FinalizerReference extends PhantomReference<Object> implements ReferenceProcessingService.ProcessingReference<FinalizerReference>, ObjectGraphNode { |
| 55 | + public static class FinalizerReference extends PhantomProcessingReference<FinalizerReference, Object> implements ObjectGraphNode { |
56 | 56 |
|
57 | 57 | /**
|
58 | 58 | * All accesses to this Deque must be synchronized by taking the
|
59 | 59 | * {@link FinalizationService} monitor, to avoid concurrent access.
|
60 | 60 | */
|
61 | 61 | private final Deque<Finalizer> finalizers = new LinkedList<>();
|
62 |
| - private final FinalizationService service; |
63 |
| - |
64 |
| - /** The doubly-linked list of FinalizerReference, needed to collect finalizer Procs for ObjectSpace. */ |
65 |
| - FinalizerReference next = null; |
66 |
| - FinalizerReference prev = null; |
67 | 62 |
|
68 | 63 | private FinalizerReference(Object object, ReferenceQueue<? super Object> queue, FinalizationService service) {
|
69 |
| - super(object, queue); |
70 |
| - this.service = service; |
71 |
| - } |
72 |
| - |
73 |
| - public FinalizerReference getPrevious() { |
74 |
| - return prev; |
75 |
| - } |
76 |
| - |
77 |
| - public void setPrevious(FinalizerReference previous) { |
78 |
| - prev = previous; |
79 |
| - } |
80 |
| - |
81 |
| - public FinalizerReference getNext() { |
82 |
| - return next; |
83 |
| - } |
84 |
| - |
85 |
| - public void setNext(FinalizerReference next) { |
86 |
| - this.next = next; |
| 64 | + super(object, queue, service); |
87 | 65 | }
|
88 | 66 |
|
89 | 67 | private void addFinalizer(Class<?> owner, Runnable action, DynamicObject root) {
|
@@ -114,10 +92,6 @@ private void collectRoots(Collection<DynamicObject> roots) {
|
114 | 92 | }
|
115 | 93 | }
|
116 | 94 |
|
117 |
| - public ReferenceProcessingService<FinalizerReference> service() { |
118 |
| - return service; |
119 |
| - } |
120 |
| - |
121 | 95 | @Override
|
122 | 96 | public void getAdjacentObjects(Set<DynamicObject> reachable) {
|
123 | 97 | collectRoots(reachable);
|
@@ -171,7 +145,7 @@ public synchronized void collectRoots(Collection<DynamicObject> roots) {
|
171 | 145 | FinalizerReference finalizerReference = getFirst();
|
172 | 146 | while (finalizerReference != null) {
|
173 | 147 | finalizerReference.collectRoots(roots);
|
174 |
| - finalizerReference = finalizerReference.next; |
| 148 | + finalizerReference = finalizerReference.getNext(); |
175 | 149 | }
|
176 | 150 | }
|
177 | 151 |
|
|
0 commit comments