src: use LocalVector in more places

PR-URL: https://github.com/nodejs/node/pull/56457
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
pull/56294/merge
James M Snell 2025-01-03 11:11:31 -08:00
parent 9400eae52e
commit b736028c7f
3 changed files with 15 additions and 8 deletions

View File

@ -547,7 +547,8 @@ void ThrowCryptoError(Environment* env,
class CipherPushContext {
public:
inline explicit CipherPushContext(Environment* env) : env_(env) {}
inline explicit CipherPushContext(Environment* env)
: list_(env->isolate()), env_(env) {}
inline void push_back(const char* str) {
list_.emplace_back(OneByteString(env_->isolate(), str));
@ -558,7 +559,7 @@ class CipherPushContext {
}
private:
std::vector<v8::Local<v8::Value>> list_;
v8::LocalVector<v8::Value> list_;
Environment* env_;
};

View File

@ -176,11 +176,7 @@ bool AsyncHooks::pop_async_context(double async_id) {
}
#endif
native_execution_async_resources_.resize(offset);
if (native_execution_async_resources_.size() <
native_execution_async_resources_.capacity() / 2 &&
native_execution_async_resources_.size() > 16) {
native_execution_async_resources_.shrink_to_fit();
}
native_execution_async_resources_.shrink_to_fit();
}
if (js_execution_async_resources()->Length() > offset) [[unlikely]] {
@ -1694,6 +1690,7 @@ AsyncHooks::AsyncHooks(Isolate* isolate, const SerializeInfo* info)
fields_(isolate, kFieldsCount, MAYBE_FIELD_PTR(info, fields)),
async_id_fields_(
isolate, kUidFieldsCount, MAYBE_FIELD_PTR(info, async_id_fields)),
native_execution_async_resources_(isolate),
info_(info) {
HandleScope handle_scope(isolate);
if (info == nullptr) {

View File

@ -401,7 +401,16 @@ class AsyncHooks : public MemoryRetainer {
void grow_async_ids_stack();
v8::Global<v8::Array> js_execution_async_resources_;
std::vector<v8::Local<v8::Object>> native_execution_async_resources_;
// TODO(@jasnell): Note that this is technically illegal use of
// v8::Locals which should be kept on the stack. Here, the entries
// in this object grows and shrinks with the C stack, and entries
// will be in the right handle scopes, but v8::Locals are supposed
// to remain on the stack and not the heap. For general purposes
// this *should* be ok but may need to be looked at further should
// v8 become stricter in the future about v8::Locals being held in
// the stack.
v8::LocalVector<v8::Object> native_execution_async_resources_;
// Non-empty during deserialization
const SerializeInfo* info_ = nullptr;