未验证 提交 142e5329 编写于 作者: B Bert Belder

libdeno: store v8::Persistent in map by value instead of by reference

上级 d0b859ec
...@@ -21,20 +21,15 @@ Deno* FromIsolate(v8::Isolate* isolate) { ...@@ -21,20 +21,15 @@ Deno* FromIsolate(v8::Isolate* isolate) {
} }
void AddDataRef(Deno* d, int32_t req_id, v8::Local<v8::Value> data_v) { void AddDataRef(Deno* d, int32_t req_id, v8::Local<v8::Value> data_v) {
// TODO Use std::unique_ptr d->async_data_map.emplace(std::piecewise_construct, std::make_tuple(req_id),
auto pair = std::make_tuple(d->isolate, data_v));
std::make_pair(req_id, new v8::Persistent<v8::Value>(d->isolate, data_v));
d->async_data_map.insert(pair);
} }
void DeleteDataRef(Deno* d, int32_t req_id) { void DeleteDataRef(Deno* d, int32_t req_id) {
// Delete persistent reference to data ArrayBuffer. // Delete persistent reference to data ArrayBuffer.
auto it = d->async_data_map.find(req_id); auto it = d->async_data_map.find(req_id);
if (it != d->async_data_map.end()) { if (it != d->async_data_map.end()) {
auto pair = *it; it->second.Reset();
auto p = pair.second;
p->Reset();
delete p;
d->async_data_map.erase(it); d->async_data_map.erase(it);
} }
} }
......
...@@ -23,7 +23,7 @@ struct deno_s { ...@@ -23,7 +23,7 @@ struct deno_s {
int32_t pending_promise_events; int32_t pending_promise_events;
v8::Persistent<v8::Context> context; 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; deno_recv_cb cb;
int32_t next_req_id; int32_t next_req_id;
void* user_data; void* user_data;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册