Commit a90165a
committed
fix: guard close race and error overwrite in cache-only init
Two subtle bugs in the cache-only exhaustion branch:
1. Close race: if close() runs before runInitializers starts, the loop
was skipped entirely and the exhaustion branch fired VALID and marked
the start() promise resolved, where it should reject with "closed
before initialization completed." Add an early return when closed is
set before the exhaustion branch.
2. VALID-over-error: the branch unconditionally requested VALID on cache
miss. Today's default CacheInitializer never emits error statuses, but
a custom cache-marked factory could. Track errorReportedDuringInit
from the interrupted/terminal_error cases and skip the VALID request
when an error was reported.
Adds regression tests for both paths: close-before-init rejects and
emits no VALID, and a cache-only factory emitting interrupted leaves
the error status intact.1 parent c7959e8 commit a90165a
2 files changed
Lines changed: 76 additions & 4 deletions
File tree
Lines changed: 56 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
193 | 193 | | |
194 | 194 | | |
195 | 195 | | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
196 | 252 | | |
197 | 253 | | |
198 | 254 | | |
| |||
Lines changed: 20 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
145 | 145 | | |
146 | 146 | | |
147 | 147 | | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
148 | 153 | | |
149 | 154 | | |
150 | 155 | | |
| |||
181 | 186 | | |
182 | 187 | | |
183 | 188 | | |
| 189 | + | |
184 | 190 | | |
185 | 191 | | |
186 | 192 | | |
| |||
194 | 200 | | |
195 | 201 | | |
196 | 202 | | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
197 | 211 | | |
198 | 212 | | |
199 | 213 | | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
204 | 220 | | |
205 | 221 | | |
206 | 222 | | |
| |||
0 commit comments