@@ -23,12 +23,10 @@ using v8::Isolate;
2323using v8::Local;
2424using v8::LocalVector;
2525using v8::MaybeLocal;
26- using v8::NewStringType;
2726using v8::Object;
2827using v8::ObjectTemplate;
2928using v8::Promise;
3029using v8::PropertyAttribute;
31- using v8::String;
3230using v8::Value;
3331
3432// Reject two promises and return `false` on failure.
@@ -51,19 +49,26 @@ Lock::Lock(Environment* env,
5149 released_promise_.Reset (env_->isolate (), released);
5250}
5351
52+ void Lock::MemoryInfo (node::MemoryTracker* tracker) const {
53+ tracker->TrackFieldWithSize (" name" , name_.size ());
54+ tracker->TrackField (" client_id" , client_id_);
55+ tracker->TrackField (" waiting_promise" , waiting_promise_);
56+ tracker->TrackField (" released_promise" , released_promise_);
57+ }
58+
5459LockRequest::LockRequest (Environment* env,
5560 Local<Promise::Resolver> waiting,
5661 Local<Promise::Resolver> released,
5762 Local<Function> callback,
5863 const std::u16string& name,
5964 Lock::Mode mode,
60- const std::string& client_id,
65+ std::string client_id,
6166 bool steal,
6267 bool if_available)
6368 : env_(env),
6469 name_ (name),
6570 mode_(mode),
66- client_id_(client_id),
71+ client_id_(std::move( client_id) ),
6772 steal_(steal),
6873 if_available_(if_available) {
6974 waiting_promise_.Reset (env_->isolate (), waiting);
@@ -573,22 +578,13 @@ void LockManager::Request(const FunctionCallbackInfo<Value>& args) {
573578 CHECK (args[4 ]->IsBoolean ()); // ifAvailable
574579 CHECK (args[5 ]->IsFunction ()); // callback
575580
576- Local<String> resource_name_str = args[0 ].As <String>();
577- TwoByteValue resource_name_utf16 (isolate, resource_name_str);
578- std::u16string resource_name (
579- reinterpret_cast <const char16_t *>(*resource_name_utf16),
580- resource_name_utf16.length ());
581- String::Utf8Value client_id_utf8 (isolate, args[1 ]);
582- std::string client_id (*client_id_utf8);
583- String::Utf8Value mode_utf8 (isolate, args[2 ]);
584- std::string mode_str (*mode_utf8);
581+ TwoByteValue resource_name (isolate, args[0 ]);
582+ Utf8Value client_id (isolate, args[1 ]);
583+ Utf8Value mode (isolate, args[2 ]);
585584 bool steal = args[3 ]->BooleanValue (isolate);
586585 bool if_available = args[4 ]->BooleanValue (isolate);
587586 Local<Function> callback = args[5 ].As <Function>();
588587
589- Lock::Mode lock_mode =
590- mode_str == " shared" ? Lock::Mode::Shared : Lock::Mode::Exclusive;
591-
592588 Local<Promise::Resolver> waiting_promise;
593589 Local<Promise::Resolver> released_promise;
594590
@@ -611,15 +607,17 @@ void LockManager::Request(const FunctionCallbackInfo<Value>& args) {
611607 env->AddCleanupHook (LockManager::OnEnvironmentCleanup, env);
612608 }
613609
614- auto lock_request = std::make_unique<LockRequest>(env,
615- waiting_promise,
616- released_promise,
617- callback,
618- resource_name,
619- lock_mode,
620- client_id,
621- steal,
622- if_available);
610+ auto lock_request = std::make_unique<LockRequest>(
611+ env,
612+ waiting_promise,
613+ released_promise,
614+ callback,
615+ resource_name.ToU16String (),
616+ mode.ToStringView () == " shared" ? Lock::Mode::Shared
617+ : Lock::Mode::Exclusive,
618+ client_id.ToString (),
619+ steal,
620+ if_available);
623621 // Steal requests get priority by going to front of queue
624622 if (steal) {
625623 manager->pending_queue_ .emplace_front (std::move (lock_request));
@@ -842,6 +840,10 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
842840 registry->Register (OnIfAvailableReject);
843841}
844842
843+ void LockHolder::MemoryInfo (node::MemoryTracker* tracker) const {
844+ tracker->TrackField (" lock" , lock_);
845+ }
846+
845847BaseObjectPtr<LockHolder> LockHolder::Create (Environment* env,
846848 std::shared_ptr<Lock> lock) {
847849 Local<Object> obj;
0 commit comments