Skip to content

Commit 49dae26

Browse files
committed
core.Effect: isRunning class field => ensure that effects can not re-trigger themselves while running #6970
1 parent 467fb2d commit 49dae26

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

src/core/Effect.mjs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ class Effect {
3030
* @protected
3131
*/
3232
isDestroyed = false
33+
/**
34+
* @member {Boolean}
35+
* @protected
36+
*/
37+
isRunning = false
3338

3439
/**
3540
* @member fn
@@ -74,13 +79,15 @@ class Effect {
7479
run() {
7580
const me = this;
7681

77-
if (me.isDestroyed) return;
82+
if (me.isDestroyed || me.isRunning) return;
7883

7984
if (EffectBatchManager.isBatchActive()) {
8085
EffectBatchManager.queueEffect(me);
8186
return
8287
}
8388

89+
me.isRunning = true;
90+
8491
me.dependencies.forEach(cleanup => cleanup());
8592
me.dependencies.clear();
8693

@@ -89,7 +96,8 @@ class Effect {
8996
try {
9097
me.fn()
9198
} finally {
92-
EffectManager.pop()
99+
EffectManager.pop();
100+
me.isRunning = false;
93101
}
94102
}
95103

0 commit comments

Comments
 (0)