@@ -108,9 +108,8 @@ export function queueJob(job: SchedulerJob): void {
108108 queue . splice ( findInsertionIndex ( jobId ) , 0 , job )
109109 }
110110
111- if ( ! ( job . flags ! & SchedulerJobFlags . ALLOW_RECURSE ) ) {
112- job . flags ! |= SchedulerJobFlags . QUEUED
113- }
111+ job . flags ! |= SchedulerJobFlags . QUEUED
112+
114113 queueFlush ( )
115114 }
116115}
@@ -128,9 +127,7 @@ export function queuePostFlushCb(cb: SchedulerJobs): void {
128127 activePostFlushCbs . splice ( postFlushIndex + 1 , 0 , cb )
129128 } else if ( ! ( cb . flags ! & SchedulerJobFlags . QUEUED ) ) {
130129 pendingPostFlushCbs . push ( cb )
131- if ( ! ( cb . flags ! & SchedulerJobFlags . ALLOW_RECURSE ) ) {
132- cb . flags ! |= SchedulerJobFlags . QUEUED
133- }
130+ cb . flags ! |= SchedulerJobFlags . QUEUED
134131 }
135132 } else {
136133 // if cb is an array, it is a component lifecycle hook which can only be
@@ -161,6 +158,9 @@ export function flushPreFlushCbs(
161158 }
162159 queue . splice ( i , 1 )
163160 i --
161+ if ( cb . flags ! & SchedulerJobFlags . ALLOW_RECURSE ) {
162+ cb . flags ! &= ~ SchedulerJobFlags . QUEUED
163+ }
164164 cb ( )
165165 cb . flags ! &= ~ SchedulerJobFlags . QUEUED
166166 }
@@ -194,6 +194,9 @@ export function flushPostFlushCbs(seen?: CountMap): void {
194194 if ( __DEV__ && checkRecursiveUpdates ( seen ! , cb ) ) {
195195 continue
196196 }
197+ if ( cb . flags ! & SchedulerJobFlags . ALLOW_RECURSE ) {
198+ cb . flags ! &= ~ SchedulerJobFlags . QUEUED
199+ }
197200 if ( ! ( cb . flags ! & SchedulerJobFlags . DISPOSED ) ) cb ( )
198201 cb . flags ! &= ~ SchedulerJobFlags . QUEUED
199202 }
@@ -228,6 +231,9 @@ function flushJobs(seen?: CountMap) {
228231 if ( __DEV__ && check ( job ) ) {
229232 continue
230233 }
234+ if ( job . flags ! & SchedulerJobFlags . ALLOW_RECURSE ) {
235+ job . flags ! &= ~ SchedulerJobFlags . QUEUED
236+ }
231237 callWithErrorHandling (
232238 job ,
233239 job . i ,
@@ -237,6 +243,14 @@ function flushJobs(seen?: CountMap) {
237243 }
238244 }
239245 } finally {
246+ // If there was an error we still need to clear the QUEUED flags
247+ for ( ; flushIndex < queue . length ; flushIndex ++ ) {
248+ const job = queue [ flushIndex ]
249+ if ( job ) {
250+ job . flags ! &= ~ SchedulerJobFlags . QUEUED
251+ }
252+ }
253+
240254 flushIndex = 0
241255 queue . length = 0
242256
0 commit comments