Thanks for the quick response!

On Friday, January 10, 2025 at 2:09:37 PM UTC+1 [email protected] 
wrote:

> On Fri, Jan 10, 2025 at 2:02 PM [email protected] <[email protected]> wrote:
>
>> Hi,
>>
>> We've been working on migration of existing wrapper classes in Node.js to 
>> use cppgc::GargageCollected, and ran into some questions regarding what can 
>> be done in the destructors. The conditions of the destructors don't seem to 
>> be very clear from the headers, so asking here for some clarification.
>>
>> 1. Is the destructor of cppgc::GargageCollected always called in the 
>> thread where they are created? It also seems possible for them to be called 
>> from platform worker threads? In the case where there's no guarantee about 
>> this, is the recommendation to use prefinalizers to make sure clean up is 
>> performed on the creation thread?
>>
>
> It's guaranteed to be called on the creation thread where they were 
> created. This should not be platform workers but always threads that are 
> used to run the Isolate. There's no known issue where this is not the case, 
> so please file a bug if you observe otherwise.
>  
>
>> 2. Is it okay to dereference v8::TracedReference held by a 
>> cppgc::GargageCollected in its destructor? Are they guaranteed to be still 
>> valid at that point?
>>
>
> No, see 3.
>  
>
>> 3. It seems trying to mutate the heap from a cppgc::GargageCollected 
>> destructor (e.g. set internal pointers of an object, so I'd assume calling 
>> into JS or allocating objects would be even more forbidden) would result in 
>> a crash. Is that something that should not be done, or is there way to do 
>> it properly? Is it safe to do these from prefinalizers instead?
>>
>
> Destructors should never refer to other managed objects, neither Oilpan 
> nor V8. That's because the finalization order is undefined. This also means 
> that in 2. you should not refer through a TracedReference as there's no 
> guarantee that the V8 object is still alive. (Technically, we may have also 
> tinkered with the TracedReference at this point. We at least did in older 
> V8 versions).
>
> If you need to reach through the heap you need a pre-finalizer.
>
> -Michael
>

-- 
-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/v8-dev/e7d5845d-982c-426a-831d-a8c8ed64d470n%40googlegroups.com.

Reply via email to