Commit cdc892a
Fix race condition in CompletionStageSubscriber.onComplete()
The spec317_mustSupportACumulativePendingElementCountUpToLongMaxValue TCK
test intermittently hangs on CI (seen on Java 21). Root cause: a race
between onComplete() and finallyAfterEachPromiseFinishes() where the
queue-emptiness check and the onCompleteRun read/write are not atomic —
the last CF can complete between the check and the set, leaving the
runnable stranded forever.
Fix by extending the existing ReentrantLock scope to also cover
onCompleteRun, making the emptiness check and runnable set/claim a
single atomic operation on both sides. Runnables are executed outside
the lock to avoid deadlocks with user code.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent 044d048 commit cdc892a
2 files changed
Lines changed: 21 additions & 27 deletions
File tree
- src/main/java/graphql/execution/reactive
Lines changed: 1 addition & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
35 | | - | |
36 | | - | |
| 35 | + | |
37 | 36 | | |
38 | 37 | | |
39 | 38 | | |
| |||
Lines changed: 20 additions & 25 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
98 | | - | |
99 | | - | |
| 98 | + | |
| 99 | + | |
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
112 | 111 | | |
113 | 112 | | |
114 | 113 | | |
| |||
149 | 148 | | |
150 | 149 | | |
151 | 150 | | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
156 | 155 | | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
157 | 160 | | |
158 | 161 | | |
159 | 162 | | |
| |||
163 | 166 | | |
164 | 167 | | |
165 | 168 | | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
| 169 | + | |
| 170 | + | |
172 | 171 | | |
173 | 172 | | |
174 | 173 | | |
| |||
186 | 185 | | |
187 | 186 | | |
188 | 187 | | |
189 | | - | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | 188 | | |
194 | 189 | | |
195 | 190 | | |
| |||
0 commit comments