mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[FIX] reactivity: fix memory leak
This commit is contained in:
committed by
Aaron Bohy
parent
7143c2e39b
commit
cc4480e001
+6
-5
@@ -49,6 +49,10 @@ function observeTargetKey(target: Target, key: ObjectKey, callback: Callback): v
|
|||||||
keyToCallbacks.set(key, new Set());
|
keyToCallbacks.set(key, new Set());
|
||||||
}
|
}
|
||||||
keyToCallbacks.get(key)!.add(callback);
|
keyToCallbacks.get(key)!.add(callback);
|
||||||
|
if (!callbacksToTargets.has(callback)) {
|
||||||
|
callbacksToTargets.set(callback, new Set());
|
||||||
|
}
|
||||||
|
callbacksToTargets.get(callback)!.add(target);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Notify Reactives that are observing a given target that a key has changed on
|
* Notify Reactives that are observing a given target that a key has changed on
|
||||||
@@ -95,9 +99,10 @@ function clearReactivesForCallback(callback: Callback): void {
|
|||||||
callbacks.delete(callback);
|
callbacks.delete(callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
targetsToClear.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
const reactiveCache = new WeakMap<Target, Map<Callback, Reactive>>();
|
const reactiveCache = new WeakMap<Target, WeakMap<Callback, Reactive>>();
|
||||||
/**
|
/**
|
||||||
* Creates a reactive proxy for an object. Reading data on the reactive object
|
* Creates a reactive proxy for an object. Reading data on the reactive object
|
||||||
* subscribes to changes to the data. Writing data on the object will cause the
|
* subscribes to changes to the data. Writing data on the object will cause the
|
||||||
@@ -182,10 +187,6 @@ export function reactive<T extends Target>(target: T, callback: Callback): React
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
reactivesForTarget.set(callback, proxy);
|
reactivesForTarget.set(callback, proxy);
|
||||||
if (!callbacksToTargets.has(callback)) {
|
|
||||||
callbacksToTargets.set(callback, new Set());
|
|
||||||
}
|
|
||||||
callbacksToTargets.get(callback)!.add(target);
|
|
||||||
}
|
}
|
||||||
return reactivesForTarget.get(callback) as Reactive<T>;
|
return reactivesForTarget.get(callback) as Reactive<T>;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user