Commit 4306c90
committed
merge revision(s) 62430c1: [Backport #21342]
Properly unlock locked mutexes on thread cleanup.
Mutexes were being improperly unlocked on thread cleanup. This bug was
introduced in 050a895.
We must keep a reference from the mutex to the thread, because if the fiber
is collected before the mutex is, then we cannot unlink it from the thread in
`mutex_free`. If it's not unlinked from the the thread when it's freed, it
causes bugs in `rb_thread_unlock_all_locking_mutexes`.
We now mark the fiber when a mutex is locked, and the thread is marked
as well. However, a fiber can still be freed in the same GC cycle as the
mutex, so the reference to the thread is still needed.
The reason we need to mark the fiber is that `mutex_owned_p()` has an ABA
issue where if the fiber is collected while it's locked, a new fiber could be
allocated at the same memory address and we could get false positives.
Fixes [Bug #21342]
Co-authored-by: John Hawthorn <[email protected]>1 parent 88a9614 commit 4306c90
4 files changed
+153
-17
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1557 | 1557 | | |
1558 | 1558 | | |
1559 | 1559 | | |
| 1560 | + | |
| 1561 | + | |
| 1562 | + | |
| 1563 | + | |
| 1564 | + | |
| 1565 | + | |
| 1566 | + | |
| 1567 | + | |
| 1568 | + | |
| 1569 | + | |
| 1570 | + | |
| 1571 | + | |
| 1572 | + | |
| 1573 | + | |
| 1574 | + | |
| 1575 | + | |
| 1576 | + | |
| 1577 | + | |
| 1578 | + | |
| 1579 | + | |
| 1580 | + | |
| 1581 | + | |
| 1582 | + | |
| 1583 | + | |
| 1584 | + | |
| 1585 | + | |
| 1586 | + | |
| 1587 | + | |
| 1588 | + | |
| 1589 | + | |
| 1590 | + | |
| 1591 | + | |
| 1592 | + | |
| 1593 | + | |
| 1594 | + | |
| 1595 | + | |
| 1596 | + | |
| 1597 | + | |
| 1598 | + | |
| 1599 | + | |
| 1600 | + | |
| 1601 | + | |
| 1602 | + | |
| 1603 | + | |
| 1604 | + | |
| 1605 | + | |
| 1606 | + | |
| 1607 | + | |
| 1608 | + | |
| 1609 | + | |
| 1610 | + | |
| 1611 | + | |
| 1612 | + | |
| 1613 | + | |
| 1614 | + | |
| 1615 | + | |
| 1616 | + | |
| 1617 | + | |
| 1618 | + | |
| 1619 | + | |
| 1620 | + | |
| 1621 | + | |
| 1622 | + | |
| 1623 | + | |
| 1624 | + | |
| 1625 | + | |
| 1626 | + | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
| 1634 | + | |
| 1635 | + | |
| 1636 | + | |
| 1637 | + | |
| 1638 | + | |
| 1639 | + | |
| 1640 | + | |
| 1641 | + | |
| 1642 | + | |
| 1643 | + | |
| 1644 | + | |
| 1645 | + | |
| 1646 | + | |
| 1647 | + | |
| 1648 | + | |
| 1649 | + | |
| 1650 | + | |
| 1651 | + | |
| 1652 | + | |
1560 | 1653 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
445 | 445 | | |
446 | 446 | | |
447 | 447 | | |
448 | | - | |
| 448 | + | |
449 | 449 | | |
450 | 450 | | |
451 | 451 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
| |||
106 | 107 | | |
107 | 108 | | |
108 | 109 | | |
109 | | - | |
110 | | - | |
111 | 110 | | |
112 | 111 | | |
113 | 112 | | |
| |||
123 | 122 | | |
124 | 123 | | |
125 | 124 | | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
126 | 152 | | |
127 | 153 | | |
128 | 154 | | |
129 | 155 | | |
130 | | - | |
131 | | - | |
132 | | - | |
| 156 | + | |
| 157 | + | |
133 | 158 | | |
134 | 159 | | |
135 | 160 | | |
| |||
143 | 168 | | |
144 | 169 | | |
145 | 170 | | |
146 | | - | |
| 171 | + | |
147 | 172 | | |
148 | 173 | | |
149 | 174 | | |
| |||
204 | 229 | | |
205 | 230 | | |
206 | 231 | | |
207 | | - | |
| 232 | + | |
208 | 233 | | |
209 | 234 | | |
210 | 235 | | |
211 | 236 | | |
212 | 237 | | |
| 238 | + | |
213 | 239 | | |
214 | 240 | | |
215 | 241 | | |
| |||
234 | 260 | | |
235 | 261 | | |
236 | 262 | | |
237 | | - | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
238 | 277 | | |
239 | 278 | | |
240 | 279 | | |
| 280 | + | |
241 | 281 | | |
242 | 282 | | |
243 | 283 | | |
| |||
258 | 298 | | |
259 | 299 | | |
260 | 300 | | |
261 | | - | |
262 | 301 | | |
263 | | - | |
| 302 | + | |
264 | 303 | | |
265 | 304 | | |
266 | 305 | | |
| |||
328 | 367 | | |
329 | 368 | | |
330 | 369 | | |
331 | | - | |
| 370 | + | |
332 | 371 | | |
333 | 372 | | |
334 | 373 | | |
| |||
358 | 397 | | |
359 | 398 | | |
360 | 399 | | |
| 400 | + | |
361 | 401 | | |
362 | 402 | | |
363 | 403 | | |
| |||
368 | 408 | | |
369 | 409 | | |
370 | 410 | | |
371 | | - | |
| 411 | + | |
372 | 412 | | |
373 | 413 | | |
374 | 414 | | |
| |||
382 | 422 | | |
383 | 423 | | |
384 | 424 | | |
385 | | - | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
386 | 429 | | |
387 | 430 | | |
388 | | - | |
| 431 | + | |
389 | 432 | | |
390 | 433 | | |
391 | 434 | | |
| |||
404 | 447 | | |
405 | 448 | | |
406 | 449 | | |
407 | | - | |
| 450 | + | |
408 | 451 | | |
409 | 452 | | |
410 | 453 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
0 commit comments