@@ -209,6 +209,9 @@ protected RubyArray defineFinalizer(VirtualFrame frame, RubyDynamicObject object
209
209
if (respondToCallNode .execute (frame , finalizer , "call" )) {
210
210
if (!getContext ().getReferenceProcessor ().processOnMainThread ()) {
211
211
// Share the finalizer, as it might run on a different Thread
212
+ if (!getContext ().getSharedObjects ().isSharing ()) {
213
+ startSharing ();
214
+ }
212
215
writeBarrierNode .executeWriteBarrier (finalizer );
213
216
}
214
217
@@ -222,6 +225,11 @@ protected RubyArray defineFinalizer(VirtualFrame frame, RubyDynamicObject object
222
225
}
223
226
}
224
227
228
+ @ TruffleBoundary
229
+ private void startSharing () {
230
+ getContext ().getSharedObjects ().startSharing (getLanguage (), "creating finalizer" );
231
+ }
232
+
225
233
@ TruffleBoundary
226
234
private void defineFinalizer (RubyDynamicObject object , Object finalizer ) {
227
235
final RubyDynamicObject root = (finalizer instanceof RubyDynamicObject )
@@ -258,6 +266,9 @@ protected Object defineFinalizer(
258
266
@ CachedLibrary (limit = "1" ) DynamicObjectLibrary objectLibrary ) {
259
267
if (!getContext ().getReferenceProcessor ().processOnMainThread ()) {
260
268
// Share the finalizer, as it might run on a different Thread
269
+ if (!getContext ().getSharedObjects ().isSharing ()) {
270
+ startSharing ();
271
+ }
261
272
writeBarrierNode .executeWriteBarrier (finalizer );
262
273
writeBarrierNode .executeWriteBarrier (dataHolder );
263
274
}
@@ -271,6 +282,11 @@ protected Object defineFinalizer(
271
282
return nil ;
272
283
}
273
284
285
+
286
+ @ TruffleBoundary
287
+ private void startSharing () {
288
+ getContext ().getSharedObjects ().startSharing (getLanguage (), "creating finalizer" );
289
+ }
274
290
}
275
291
276
292
@ CoreMethod (names = "undefine_finalizer" , isModuleFunction = true , required = 1 )
0 commit comments