summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2018-10-19 00:20:23 +0200
committerBert Belder <bertbelder@gmail.com>2018-10-19 02:35:49 +0200
commit142e532910a534080de297de5be88a502163fc4e (patch)
treeb7e3585bcad6e73056ae31b3aa3c24928b83756c
parentd0b859ec377a757d8bf726752c00be7ede73478e (diff)
libdeno: store v8::Persistent in map by value instead of by reference
-rw-r--r--libdeno/binding.cc11
-rw-r--r--libdeno/internal.h2
2 files changed, 4 insertions, 9 deletions
diff --git a/libdeno/binding.cc b/libdeno/binding.cc
index c1fd0df73..3a3f171e6 100644
--- a/libdeno/binding.cc
+++ b/libdeno/binding.cc
@@ -21,20 +21,15 @@ Deno* FromIsolate(v8::Isolate* isolate) {
}
void AddDataRef(Deno* d, int32_t req_id, v8::Local<v8::Value> data_v) {
- // TODO Use std::unique_ptr
- auto pair =
- std::make_pair(req_id, new v8::Persistent<v8::Value>(d->isolate, data_v));
- d->async_data_map.insert(pair);
+ d->async_data_map.emplace(std::piecewise_construct, std::make_tuple(req_id),
+ std::make_tuple(d->isolate, data_v));
}
void DeleteDataRef(Deno* d, int32_t req_id) {
// Delete persistent reference to data ArrayBuffer.
auto it = d->async_data_map.find(req_id);
if (it != d->async_data_map.end()) {
- auto pair = *it;
- auto p = pair.second;
- p->Reset();
- delete p;
+ it->second.Reset();
d->async_data_map.erase(it);
}
}
diff --git a/libdeno/internal.h b/libdeno/internal.h
index 2093725b9..b902c556b 100644
--- a/libdeno/internal.h
+++ b/libdeno/internal.h
@@ -23,7 +23,7 @@ struct deno_s {
int32_t pending_promise_events;
v8::Persistent<v8::Context> context;
- std::map<int32_t, v8::Persistent<v8::Value>*> async_data_map;
+ std::map<int32_t, v8::Persistent<v8::Value>> async_data_map;
deno_recv_cb cb;
int32_t next_req_id;
void* user_data;