@@ -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);
@@ -85,6 +90,7 @@ Local<DictionaryTemplate> GetLockInfoTemplate(Environment* env) {
8590 return tmpl;
8691}
8792
93+ // The request here can be either a Lock or a LockRequest.
8894static MaybeLocal<Object> CreateLockInfoObject (Environment* env,
8995 const auto & request) {
9096 auto tmpl = GetLockInfoTemplate (env);
@@ -573,22 +579,13 @@ void LockManager::Request(const FunctionCallbackInfo<Value>& args) {
573579 CHECK (args[4 ]->IsBoolean ()); // ifAvailable
574580 CHECK (args[5 ]->IsFunction ()); // callback
575581
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);
582+ TwoByteValue resource_name (isolate, args[0 ]);
583+ Utf8Value client_id (isolate, args[1 ]);
584+ Utf8Value mode (isolate, args[2 ]);
585585 bool steal = args[3 ]->BooleanValue (isolate);
586586 bool if_available = args[4 ]->BooleanValue (isolate);
587587 Local<Function> callback = args[5 ].As <Function>();
588588
589- Lock::Mode lock_mode =
590- mode_str == " shared" ? Lock::Mode::Shared : Lock::Mode::Exclusive;
591-
592589 Local<Promise::Resolver> waiting_promise;
593590 Local<Promise::Resolver> released_promise;
594591
@@ -611,15 +608,17 @@ void LockManager::Request(const FunctionCallbackInfo<Value>& args) {
611608 env->AddCleanupHook (LockManager::OnEnvironmentCleanup, env);
612609 }
613610
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);
611+ auto lock_request = std::make_unique<LockRequest>(
612+ env,
613+ waiting_promise,
614+ released_promise,
615+ callback,
616+ resource_name.ToU16String (),
617+ mode.ToStringView () == " shared" ? Lock::Mode::Shared
618+ : Lock::Mode::Exclusive,
619+ client_id.ToString (),
620+ steal,
621+ if_available);
623622 // Steal requests get priority by going to front of queue
624623 if (steal) {
625624 manager->pending_queue_ .emplace_front (std::move (lock_request));
@@ -842,6 +841,10 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
842841 registry->Register (OnIfAvailableReject);
843842}
844843
844+ void LockHolder::MemoryInfo (node::MemoryTracker* tracker) const {
845+ tracker->TrackField (" lock" , lock_);
846+ }
847+
845848BaseObjectPtr<LockHolder> LockHolder::Create (Environment* env,
846849 std::shared_ptr<Lock> lock) {
847850 Local<Object> obj;
0 commit comments