@@ -23,12 +23,10 @@ using v8::Isolate;
23
23
using v8::Local;
24
24
using v8::LocalVector;
25
25
using v8::MaybeLocal;
26
- using v8::NewStringType;
27
26
using v8::Object;
28
27
using v8::ObjectTemplate;
29
28
using v8::Promise;
30
29
using v8::PropertyAttribute;
31
- using v8::String;
32
30
using v8::Value;
33
31
34
32
// Reject two promises and return `false` on failure.
@@ -51,19 +49,26 @@ Lock::Lock(Environment* env,
51
49
released_promise_.Reset (env_->isolate (), released);
52
50
}
53
51
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
+
54
59
LockRequest::LockRequest (Environment* env,
55
60
Local<Promise::Resolver> waiting,
56
61
Local<Promise::Resolver> released,
57
62
Local<Function> callback,
58
63
const std::u16string& name,
59
64
Lock::Mode mode,
60
- const std::string& client_id,
65
+ std::string client_id,
61
66
bool steal,
62
67
bool if_available)
63
68
: env_(env),
64
69
name_ (name),
65
70
mode_(mode),
66
- client_id_(client_id),
71
+ client_id_(std::move( client_id) ),
67
72
steal_(steal),
68
73
if_available_(if_available) {
69
74
waiting_promise_.Reset (env_->isolate (), waiting);
@@ -85,6 +90,7 @@ Local<DictionaryTemplate> GetLockInfoTemplate(Environment* env) {
85
90
return tmpl;
86
91
}
87
92
93
+ // The request here can be either a Lock or a LockRequest.
88
94
static MaybeLocal<Object> CreateLockInfoObject (Environment* env,
89
95
const auto & request) {
90
96
auto tmpl = GetLockInfoTemplate (env);
@@ -573,22 +579,13 @@ void LockManager::Request(const FunctionCallbackInfo<Value>& args) {
573
579
CHECK (args[4 ]->IsBoolean ()); // ifAvailable
574
580
CHECK (args[5 ]->IsFunction ()); // callback
575
581
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 ]);
585
585
bool steal = args[3 ]->BooleanValue (isolate);
586
586
bool if_available = args[4 ]->BooleanValue (isolate);
587
587
Local<Function> callback = args[5 ].As <Function>();
588
588
589
- Lock::Mode lock_mode =
590
- mode_str == " shared" ? Lock::Mode::Shared : Lock::Mode::Exclusive;
591
-
592
589
Local<Promise::Resolver> waiting_promise;
593
590
Local<Promise::Resolver> released_promise;
594
591
@@ -611,15 +608,17 @@ void LockManager::Request(const FunctionCallbackInfo<Value>& args) {
611
608
env->AddCleanupHook (LockManager::OnEnvironmentCleanup, env);
612
609
}
613
610
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);
623
622
// Steal requests get priority by going to front of queue
624
623
if (steal) {
625
624
manager->pending_queue_ .emplace_front (std::move (lock_request));
@@ -842,6 +841,10 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
842
841
registry->Register (OnIfAvailableReject);
843
842
}
844
843
844
+ void LockHolder::MemoryInfo (node::MemoryTracker* tracker) const {
845
+ tracker->TrackField (" lock" , lock_);
846
+ }
847
+
845
848
BaseObjectPtr<LockHolder> LockHolder::Create (Environment* env,
846
849
std::shared_ptr<Lock> lock) {
847
850
Local<Object> obj;
0 commit comments