@@ -313,31 +313,28 @@ export function update_reaction(reaction) {
313313 var result = /** @type {Function } */ ( 0 , reaction . fn ) ( ) ;
314314 var deps = reaction . deps ;
315315
316- // Avoid doing work on an effect/derived that might have become destroyed
317- if ( ( flags & DESTROYED ) === 0 ) {
318- if ( new_deps !== null ) {
319- var i ;
316+ if ( new_deps !== null ) {
317+ var i ;
320318
321- remove_reactions ( reaction , skipped_deps ) ;
319+ remove_reactions ( reaction , skipped_deps ) ;
322320
323- if ( deps !== null && skipped_deps > 0 ) {
324- deps . length = skipped_deps + new_deps . length ;
325- for ( i = 0 ; i < new_deps . length ; i ++ ) {
326- deps [ skipped_deps + i ] = new_deps [ i ] ;
327- }
328- } else {
329- reaction . deps = deps = new_deps ;
321+ if ( deps !== null && skipped_deps > 0 ) {
322+ deps . length = skipped_deps + new_deps . length ;
323+ for ( i = 0 ; i < new_deps . length ; i ++ ) {
324+ deps [ skipped_deps + i ] = new_deps [ i ] ;
330325 }
326+ } else {
327+ reaction . deps = deps = new_deps ;
328+ }
331329
332- if ( ! skip_reaction ) {
333- for ( i = skipped_deps ; i < deps . length ; i ++ ) {
334- ( deps [ i ] . reactions ??= [ ] ) . push ( reaction ) ;
335- }
330+ if ( ! skip_reaction ) {
331+ for ( i = skipped_deps ; i < deps . length ; i ++ ) {
332+ ( deps [ i ] . reactions ??= [ ] ) . push ( reaction ) ;
336333 }
337- } else if ( deps !== null && skipped_deps < deps . length ) {
338- remove_reactions ( reaction , skipped_deps ) ;
339- deps . length = skipped_deps ;
340334 }
335+ } else if ( deps !== null && skipped_deps < deps . length ) {
336+ remove_reactions ( reaction , skipped_deps ) ;
337+ deps . length = skipped_deps ;
341338 }
342339
343340 return result ;
@@ -748,7 +745,10 @@ export function get(signal) {
748745 // If the derived is destroyed, just execute it again without retaining
749746 // it's memoisation properties – as the derived is stale
750747 if ( is_derived && ( flags & DESTROYED ) !== 0 ) {
751- return execute_derived ( /** @type {Derived } */ ( signal ) ) ;
748+ var value = execute_derived ( /** @type {Derived } */ ( signal ) ) ;
749+ // Ensure the derived remains destroyed
750+ destroy_derived ( /** @type {Derived } */ ( signal ) ) ;
751+ return value ;
752752 }
753753
754754 if ( is_signals_recorded ) {
0 commit comments