Weak map only needs to be deleted for once
This commit is contained in:
parent
eb8426269f
commit
48a11bd237
1 changed files with 5 additions and 6 deletions
|
@ -98,11 +98,6 @@ class TrackableObject : public TrackableObjectBase {
|
||||||
return std::vector<v8::Local<v8::Object>>();
|
return std::vector<v8::Local<v8::Object>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackableObject() {
|
|
||||||
RegisterDestructionCallback(
|
|
||||||
base::Bind(&TrackableObject<T>::ReleaseAllWeakReferences));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removes this instance from the weak map.
|
// Removes this instance from the weak map.
|
||||||
void RemoveFromWeakMap() {
|
void RemoveFromWeakMap() {
|
||||||
if (weak_map_ && weak_map_->Has(weak_map_id()))
|
if (weak_map_ && weak_map_->Has(weak_map_id()))
|
||||||
|
@ -110,13 +105,17 @@ class TrackableObject : public TrackableObjectBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
TrackableObject() {}
|
||||||
~TrackableObject() override {
|
~TrackableObject() override {
|
||||||
RemoveFromWeakMap();
|
RemoveFromWeakMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AfterInit(v8::Isolate* isolate) override {
|
void AfterInit(v8::Isolate* isolate) override {
|
||||||
if (!weak_map_)
|
if (!weak_map_) {
|
||||||
weak_map_.reset(new atom::IDWeakMap);
|
weak_map_.reset(new atom::IDWeakMap);
|
||||||
|
RegisterDestructionCallback(
|
||||||
|
base::Bind(&TrackableObject<T>::ReleaseAllWeakReferences));
|
||||||
|
}
|
||||||
weak_map_id_ = weak_map_->Add(isolate, GetWrapper(isolate));
|
weak_map_id_ = weak_map_->Add(isolate, GetWrapper(isolate));
|
||||||
TrackableObjectBase::AfterInit(isolate);
|
TrackableObjectBase::AfterInit(isolate);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue