Commit e22a984
committed
Bugfix: Don't rely on
I recently started using `pendingPassiveEffectsLanes` to check if there were any pending
passive effects (530027a). `pendingPassiveEffectsLanes` is the value of
`root.finishedLanes` at the beginning of the commit phase. When there
are pending passive effects, it should always be a non-zero value,
because it represents the lanes used to render the effects.
But it turns out that `root.finishedLanes` isn't always correct.
Sometimes it's `NoLanes` even when there's a new commit.
I found this while investigating an internal bug report. The only repro
I could get was via a headless e2e test runner; I couldn't get one in an
actual browser, or other interactive environment. I used the e2e test to
bisect and confirm the fix. But I don't know yet know how to write a
regression test for the precise underlying scenario. I can probably
reverse engineer one by studying the code; after a quick glance
at `performConcurrentWorkOnRoot` and `performSyncWorkOnRoot`, it's not
hard to see how this might happen.
In the meantime, I'll revert the recent change that exposed the bug.
I was surprised that this had never come up before, since the code that
assigns `root.finishedLanes` is in an extremely hot path, and it hasn't
changed in a while. The reason is that, before 530027a,
`root.finishedLanes` was only used by the DevTools profiler, which is
probably why we had never noticed any issues. In addition to fixing the
inconsistency, we might also consider making `finishedLanes` a
profiling-only field.finishedLanes for passive effects1 parent 343710c commit e22a984
File tree
2 files changed
+18
-2
lines changed- packages/react-reconciler/src
2 files changed
+18
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2131 | 2131 | | |
2132 | 2132 | | |
2133 | 2133 | | |
2134 | | - | |
| 2134 | + | |
| 2135 | + | |
| 2136 | + | |
| 2137 | + | |
| 2138 | + | |
| 2139 | + | |
2135 | 2140 | | |
2136 | 2141 | | |
2137 | 2142 | | |
| |||
2169 | 2174 | | |
2170 | 2175 | | |
2171 | 2176 | | |
| 2177 | + | |
| 2178 | + | |
| 2179 | + | |
2172 | 2180 | | |
2173 | 2181 | | |
2174 | 2182 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2131 | 2131 | | |
2132 | 2132 | | |
2133 | 2133 | | |
2134 | | - | |
| 2134 | + | |
| 2135 | + | |
| 2136 | + | |
| 2137 | + | |
| 2138 | + | |
| 2139 | + | |
2135 | 2140 | | |
2136 | 2141 | | |
2137 | 2142 | | |
| |||
2169 | 2174 | | |
2170 | 2175 | | |
2171 | 2176 | | |
| 2177 | + | |
| 2178 | + | |
| 2179 | + | |
2172 | 2180 | | |
2173 | 2181 | | |
2174 | 2182 | | |
| |||
0 commit comments