0
0
Fork 0
mirror of https://github.com/denoland/rusty_v8.git synced 2024-12-23 15:50:11 -05:00

Don't run GC on isolate disposal (#1181)

Removing this garbage collection trigger removes the guarantee that
"regular" FinalizerCallbacks will be called before the isolate goes away.
It is fine as both spec and V8 do not provide this guarantee and we were
overly strict in this case.
This commit is contained in:
Bartek Iwańczuk 2023-02-02 11:59:14 +01:00 committed by GitHub
parent 1269ad6ac5
commit d3fff51d2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 0 additions and 44 deletions

View file

@ -954,10 +954,6 @@ impl FinalizerMap {
id
}
pub(crate) fn is_empty(&self) -> bool {
self.map.is_empty()
}
pub(crate) fn drain(
&mut self,
) -> impl Iterator<Item = FinalizerCallback> + '_ {

View file

@ -1182,15 +1182,6 @@ impl Isolate {
// Drop the scope stack.
ScopeData::drop_root(self);
// If there are finalizers left to call, we trigger GC to try and call as
// many of them as possible.
if !self.get_annex().finalizer_map.is_empty() {
// A low memory notification triggers a synchronous GC, which means
// finalizers will be called during the course of the call, rather than at
// some later point.
self.low_memory_notification();
}
// Set the `isolate` pointer inside the annex struct to null, so any
// IsolateHandle that outlives the isolate will know that it can't call
// methods on the isolate.

View file

@ -7943,37 +7943,6 @@ fn drop_weak_from_raw_in_finalizer() {
assert!(finalized.get());
}
#[test]
fn finalizer_on_global_object() {
use std::cell::Cell;
use std::rc::Rc;
let _setup_guard = setup::parallel_test();
let weak;
let finalized = Rc::new(Cell::new(false));
{
let isolate = &mut v8::Isolate::new(Default::default());
let scope = &mut v8::HandleScope::new(isolate);
let context = v8::Context::new(scope);
let scope = &mut v8::ContextScope::new(scope, context);
let global_object = context.global(scope);
weak = v8::Weak::with_finalizer(
scope,
global_object,
Box::new({
let finalized = finalized.clone();
move |_| finalized.set(true)
}),
);
}
assert!(finalized.get());
drop(weak);
}
#[test]
fn finalizer_on_kept_global() {
// If a global is kept alive after an isolate is dropped, regular finalizers