Skip to content

fix(store): skip state mutations when injector is destroyed mid-action#2406

Merged
arturovt merged 2 commits into
masterfrom
fix/skip-subject-updates
Mar 26, 2026
Merged

fix(store): skip state mutations when injector is destroyed mid-action#2406
arturovt merged 2 commits into
masterfrom
fix/skip-subject-updates

Conversation

@arturovt
Copy link
Copy Markdown
Member

When the application is destroyed while an action observable is still in-flight, any subsequent setState/patchState calls on the StateContext would throw an ObjectUnsubscribedError because the underlying subjects had already completed.

Guard both setState and patchState in StateContextFactory to no-op if the EnvironmentInjector has been destroyed, matching the same pattern used elsewhere in the codebase.

Adds a regression test covering the case where appRef.destroy() is called during a timer-based action and setState is invoked from finalize.

When the application is destroyed while an action observable is still
in-flight, any subsequent setState/patchState calls on the StateContext
would throw an ObjectUnsubscribedError because the underlying subjects
had already completed.

Guard both setState and patchState in StateContextFactory to no-op if
the EnvironmentInjector has been destroyed, matching the same pattern
used elsewhere in the codebase.

Adds a regression test covering the case where appRef.destroy() is
called during a timer-based action and setState is invoked from finalize.
@nx-cloud
Copy link
Copy Markdown

nx-cloud Bot commented Mar 26, 2026

View your CI Pipeline Execution ↗ for commit 78c2f15

Command Status Duration Result
nx run-many --target=test --all --configuration... ✅ Succeeded 2m 28s View ↗
nx run-many --target=lint --all --exclude=creat... ✅ Succeeded 6s View ↗
nx lint-types store ✅ Succeeded <1s View ↗
nx run-many --target=build --all ✅ Succeeded 2s View ↗

☁️ Nx Cloud last updated this comment at 2026-03-26 23:39:01 UTC

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented Mar 26, 2026

Open in StackBlitz

@ngxs/devtools-plugin

npm i https://pkg.pr.new/@ngxs/devtools-plugin@2406

@ngxs/form-plugin

npm i https://pkg.pr.new/@ngxs/form-plugin@2406

@ngxs/hmr-plugin

npm i https://pkg.pr.new/@ngxs/hmr-plugin@2406

@ngxs/router-plugin

npm i https://pkg.pr.new/@ngxs/router-plugin@2406

@ngxs/storage-plugin

npm i https://pkg.pr.new/@ngxs/storage-plugin@2406

@ngxs/store

npm i https://pkg.pr.new/@ngxs/store@2406

@ngxs/websocket-plugin

npm i https://pkg.pr.new/@ngxs/websocket-plugin@2406

commit: 78c2f15

@bundlemon
Copy link
Copy Markdown

bundlemon Bot commented Mar 26, 2026

BundleMon

Files updated (1)
Status Path Size Limits
fesm2022/ngxs-store.mjs
109.93KB (+494B +0.44%) 110KB / +0.5%
Unchanged files (5)
Status Path Size Limits
fesm2022/ngxs-store-internals.mjs
13.74KB 15KB / +0.5%
fesm2022/ngxs-store-internals-testing.mjs
10.32KB 13KB / +0.5%
fesm2022/ngxs-store-operators.mjs
6.05KB 7KB / +0.5%
fesm2022/ngxs-store-plugins.mjs
2.37KB 3KB / +0.5%
fesm2022/ngxs-store-experimental.mjs
574B 2KB / +0.5%

Total files change +494B +0.34%

Groups updated (1)
Status Path Size Limits
@ngxs/store(fesm2022)[gzip]
./fesm2022/*.mjs
35.24KB (+98B +0.27%) +1%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@bundlemon
Copy link
Copy Markdown

bundlemon Bot commented Mar 26, 2026

BundleMon (NGXS Plugins)

Unchanged files (9)
Status Path Size Limits
Plugins(fesm2022)[gzip]
storage-plugin/fesm2022/ngxs-storage-plugin.m
js
4.1KB +0.5%
Plugins(fesm2022)[gzip]
router-plugin/fesm2022/ngxs-router-plugin.mjs
3.4KB +0.5%
Plugins(fesm2022)[gzip]
hmr-plugin/fesm2022/ngxs-hmr-plugin.mjs
2.72KB +0.5%
Plugins(fesm2022)[gzip]
websocket-plugin/fesm2022/ngxs-websocket-plug
in.mjs
2.58KB +0.5%
Plugins(fesm2022)[gzip]
form-plugin/fesm2022/ngxs-form-plugin.mjs
2.47KB +0.5%
Plugins(fesm2022)[gzip]
devtools-plugin/fesm2022/ngxs-devtools-plugin
.mjs
2.23KB +0.5%
Plugins(fesm2022)[gzip]
logger-plugin/fesm2022/ngxs-logger-plugin.mjs
2.03KB +0.5%
Plugins(fesm2022)[gzip]
storage-plugin/fesm2022/ngxs-storage-plugin-i
nternals.mjs
947B +0.5%
Plugins(fesm2022)[gzip]
router-plugin/fesm2022/ngxs-router-plugin-int
ernals.mjs
453B +0.5%

No change in files bundle size

Unchanged groups (1)
Status Path Size Limits
All Plugins(fesm2022)[gzip]
./-plugin/fesm2022/.mjs
20.89KB +0.5%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@bundlemon
Copy link
Copy Markdown

bundlemon Bot commented Mar 26, 2026

BundleMon (Integration Projects)

Files updated (1)
Status Path Size Limits
Main bundles(Gzip)
hello-world-ng21/dist-integration/browser/mai
n-(hash).js
67.23KB (+14B +0.02%) +1%

Total files change +14B +0.02%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@arturovt arturovt merged commit 4fadd1d into master Mar 26, 2026
11 checks passed
@arturovt arturovt deleted the fix/skip-subject-updates branch March 26, 2026 23:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant