Skip to content

Commit 2460ab4

Browse files
committed
Eliminate locks from the marking service.
PullRequest: truffleruby/659
2 parents 8345278 + f1f9120 commit 2460ab4

File tree

7 files changed

+283
-111
lines changed

7 files changed

+283
-111
lines changed

src/main/java/org/truffleruby/cext/CExtNodes.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,8 +1541,8 @@ public abstract static class PushPreservingFrame extends CoreMethodArrayArgument
15411541

15421542
@Specialization
15431543
public DynamicObject pushFrame(VirtualFrame frame,
1544-
@Cached("create()") MarkingServiceNodes.GetPreservationStackNode getStackNode) {
1545-
getStackNode.execute(frame).push();
1544+
@Cached("create()") MarkingServiceNodes.GetMarkerThreadLocalDataNode getDataNode) {
1545+
getDataNode.execute(frame).getPreservationStack().push();
15461546
return nil();
15471547
}
15481548
}
@@ -1552,8 +1552,8 @@ public abstract static class PopPreservingFrame extends CoreMethodArrayArguments
15521552

15531553
@Specialization
15541554
public DynamicObject popFrame(VirtualFrame frame,
1555-
@Cached("create()") MarkingServiceNodes.GetPreservationStackNode getStackNode) {
1556-
getStackNode.execute(frame).pop();
1555+
@Cached("create()") MarkingServiceNodes.GetMarkerThreadLocalDataNode getDataNode) {
1556+
getDataNode.execute(frame).getPreservationStack().pop();
15571557
return nil();
15581558
}
15591559
}

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

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
*/
1010
package org.truffleruby.core;
1111

12-
import java.lang.ref.PhantomReference;
1312
import java.lang.ref.ReferenceQueue;
1413
import java.util.Collection;
1514
import java.util.Deque;
1615
import java.util.LinkedList;
1716
import java.util.Set;
1817

1918
import org.truffleruby.RubyContext;
19+
import org.truffleruby.core.ReferenceProcessingService.PhantomProcessingReference;
2020

2121
import com.oracle.truffle.api.object.DynamicObject;
2222
import org.truffleruby.language.objects.ObjectGraphNode;
@@ -52,38 +52,16 @@ public DynamicObject getRoot() {
5252
}
5353
}
5454

55-
public static class FinalizerReference extends PhantomReference<Object> implements ReferenceProcessingService.ProcessingReference<FinalizerReference>, ObjectGraphNode {
55+
public static class FinalizerReference extends PhantomProcessingReference<FinalizerReference, Object> implements ObjectGraphNode {
5656

5757
/**
5858
* All accesses to this Deque must be synchronized by taking the
5959
* {@link FinalizationService} monitor, to avoid concurrent access.
6060
*/
6161
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;
6762

6863
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);
8765
}
8866

8967
private void addFinalizer(Class<?> owner, Runnable action, DynamicObject root) {
@@ -114,10 +92,6 @@ private void collectRoots(Collection<DynamicObject> roots) {
11492
}
11593
}
11694

117-
public ReferenceProcessingService<FinalizerReference> service() {
118-
return service;
119-
}
120-
12195
@Override
12296
public void getAdjacentObjects(Set<DynamicObject> reachable) {
12397
collectRoots(reachable);
@@ -171,7 +145,7 @@ public synchronized void collectRoots(Collection<DynamicObject> roots) {
171145
FinalizerReference finalizerReference = getFirst();
172146
while (finalizerReference != null) {
173147
finalizerReference.collectRoots(roots);
174-
finalizerReference = finalizerReference.next;
148+
finalizerReference = finalizerReference.getNext();
175149
}
176150
}
177151

0 commit comments

Comments
 (0)