#include "src/objects/managed.h"
#include "src/handles/global-handles-inl.h"
#include "src/sandbox/external-pointer-table-inl.h"
namespace v8 {
namespace internal {
namespace {
void ManagedObjectFinalizerSecondPass(const v8::WeakCallbackInfo<void>& data) {
auto destructor =
reinterpret_cast<ManagedPtrDestructor*>(data.GetParameter());
Isolate* isolate = reinterpret_cast<Isolate*>(data.GetIsolate());
isolate->UnregisterManagedPtrDestructor(destructor);
destructor->destructor_(destructor->shared_ptr_ptr_);
destructor->external_memory_accounter_.Decrease(
reinterpret_cast<v8::Isolate*>(isolate), destructor->estimated_size_);
#ifdef V8_ENABLE_SANDBOX
destructor->ZapExternalPointerTableEntry();
#endif
delete destructor;
}
}
void ManagedObjectFinalizer(const v8::WeakCallbackInfo<void>& data) {
auto destructor =
reinterpret_cast<ManagedPtrDestructor*>(data.GetParameter());
GlobalHandles::Destroy(destructor->global_handle_location_);
data.SetSecondPassCallback(&ManagedObjectFinalizerSecondPass);
}
}
}