|
10 | 10 | package org.truffleruby.core;
|
11 | 11 |
|
12 | 12 | import java.lang.ref.ReferenceQueue;
|
| 13 | +import java.util.concurrent.locks.ReentrantLock; |
13 | 14 |
|
14 | 15 | import org.truffleruby.RubyContext;
|
15 | 16 | import org.truffleruby.RubyLanguage;
|
16 | 17 | import org.truffleruby.cext.DataHolder;
|
17 | 18 | import org.truffleruby.core.MarkingService.ExtensionCallStack;
|
| 19 | +import org.truffleruby.core.mutex.MutexOperations; |
18 | 20 | import org.truffleruby.language.RubyBaseRootNode;
|
19 | 21 | import org.truffleruby.language.backtrace.InternalRootNode;
|
20 | 22 |
|
| 23 | +import com.oracle.truffle.api.CallTarget; |
21 | 24 | import com.oracle.truffle.api.interop.ArityException;
|
22 | 25 | import com.oracle.truffle.api.interop.InteropLibrary;
|
23 | 26 | import com.oracle.truffle.api.interop.UnsupportedMessageException;
|
24 | 27 | import com.oracle.truffle.api.interop.UnsupportedTypeException;
|
| 28 | +import com.oracle.truffle.api.profiles.ConditionProfile; |
25 | 29 | import com.oracle.truffle.api.frame.VirtualFrame;
|
26 | 30 |
|
27 | 31 | /** Finalizers are implemented with phantom references and reference queues, and are run in a dedicated Ruby thread. */
|
28 | 32 | public class DataObjectFinalizationService extends ReferenceProcessingService<DataObjectFinalizerReference> {
|
29 | 33 |
|
30 |
| - // We need a base node here, it shoudl extend ruby base root node and implement internal root node. |
| 34 | + // We need a base node here, it should extend ruby base root node and implement internal root node. |
31 | 35 | public static class DataObjectFinalizerRootNode extends RubyBaseRootNode implements InternalRootNode {
|
32 | 36 |
|
33 | 37 | @Child private InteropLibrary nullNode;
|
@@ -64,21 +68,21 @@ public Object execute(DataObjectFinalizerReference ref) {
|
64 | 68 |
|
65 | 69 | private final DataObjectFinalizerRootNode rootNode;
|
66 | 70 |
|
67 |
| - public DataObjectFinalizationService(ReferenceQueue<Object> processingQueue) { |
| 71 | + public DataObjectFinalizationService(RubyLanguage language, ReferenceQueue<Object> processingQueue) { |
68 | 72 | super(processingQueue);
|
69 |
| - rootNode = new DataObjectFinalizerRootNode(RubyLanguage.getCurrentLanguage()); |
| 73 | + rootNode = new DataObjectFinalizerRootNode(language); |
70 | 74 | }
|
71 | 75 |
|
72 |
| - public DataObjectFinalizationService(ReferenceProcessor referenceProcessor) { |
73 |
| - this(referenceProcessor.processingQueue); |
| 76 | + public DataObjectFinalizationService(RubyLanguage language, ReferenceProcessor referenceProcessor) { |
| 77 | + this(language, referenceProcessor.processingQueue); |
74 | 78 | }
|
75 | 79 |
|
76 | 80 | public DataObjectFinalizerReference addFinalizer(RubyContext context, Object object, Object callable,
|
77 | 81 | DataHolder dataHolder) {
|
78 | 82 | final DataObjectFinalizerReference newRef = createRef(object, callable, dataHolder);
|
79 | 83 |
|
80 | 84 | add(newRef);
|
81 |
| - context.getReferenceProcessor().processReferenceQueue(); |
| 85 | + context.getReferenceProcessor().processReferenceQueue(this); |
82 | 86 |
|
83 | 87 | return newRef;
|
84 | 88 | }
|
|
0 commit comments