Skip to content

Commit 30c85da

Browse files
committed
Start sharing when a ref processing thread will be created.
1 parent 8fc5d9d commit 30c85da

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

src/main/java/org/truffleruby/core/objectspace/ObjectSpaceNodes.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,9 @@ protected RubyArray defineFinalizer(VirtualFrame frame, RubyDynamicObject object
209209
if (respondToCallNode.execute(frame, finalizer, "call")) {
210210
if (!getContext().getReferenceProcessor().processOnMainThread()) {
211211
// Share the finalizer, as it might run on a different Thread
212+
if (!getContext().getSharedObjects().isSharing()) {
213+
startSharing();
214+
}
212215
writeBarrierNode.executeWriteBarrier(finalizer);
213216
}
214217

@@ -222,6 +225,11 @@ protected RubyArray defineFinalizer(VirtualFrame frame, RubyDynamicObject object
222225
}
223226
}
224227

228+
@TruffleBoundary
229+
private void startSharing() {
230+
getContext().getSharedObjects().startSharing(getLanguage(), "creating finalizer");
231+
}
232+
225233
@TruffleBoundary
226234
private void defineFinalizer(RubyDynamicObject object, Object finalizer) {
227235
final RubyDynamicObject root = (finalizer instanceof RubyDynamicObject)
@@ -258,6 +266,9 @@ protected Object defineFinalizer(
258266
@CachedLibrary(limit = "1") DynamicObjectLibrary objectLibrary) {
259267
if (!getContext().getReferenceProcessor().processOnMainThread()) {
260268
// Share the finalizer, as it might run on a different Thread
269+
if (!getContext().getSharedObjects().isSharing()) {
270+
startSharing();
271+
}
261272
writeBarrierNode.executeWriteBarrier(finalizer);
262273
writeBarrierNode.executeWriteBarrier(dataHolder);
263274
}
@@ -271,6 +282,11 @@ protected Object defineFinalizer(
271282
return nil;
272283
}
273284

285+
286+
@TruffleBoundary
287+
private void startSharing() {
288+
getContext().getSharedObjects().startSharing(getLanguage(), "creating finalizer");
289+
}
274290
}
275291

276292
@CoreMethod(names = "undefine_finalizer", isModuleFunction = true, required = 1)

0 commit comments

Comments
 (0)