Commit b1c2d76
committed
Fix possible core dump in parallel restore when using a TOC list.
Commit 3eb9a5e unintentionally introduced an ordering dependency
into restore_toc_entries_prefork(). The existing coding of
reduce_dependencies() contains a check to skip moving a TOC entry
to the ready_list if it wasn't initially in the pending_list.
This used to suffice to prevent reduce_dependencies() from trying to
move anything into the ready_list during restore_toc_entries_prefork(),
because the pending_list stayed empty throughout that phase; but it no
longer does. The problem doesn't manifest unless the TOC has been
reordered by SortTocFromFile, which is how I missed it in testing.
To fix, just add a test for ready_list == NULL, converting the call
with NULL from a poor man's sanity check into an explicit command
not to touch TOC items' list membership. Clarify some of the comments
around this; in particular, note the primary purpose of the check for
pending_list membership, which is to ensure that we can't try to restore
the same item twice, in case a TOC list forces it to be restored before
its dependency count goes to zero.
Per report from Fabrízio de Royes Mello. Back-patch to 9.3, like the
previous commit.
Discussion: https://postgr.es/m/CAFcNs+pjuv0JL_x4+=71TPUPjdLHOXA4YfT32myj_OrrZb4ohA@mail.gmail.com1 parent 24620fc commit b1c2d76
1 file changed
+14
-9
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3851 | 3851 | | |
3852 | 3852 | | |
3853 | 3853 | | |
3854 | | - | |
3855 | | - | |
| 3854 | + | |
| 3855 | + | |
| 3856 | + | |
3856 | 3857 | | |
3857 | 3858 | | |
3858 | 3859 | | |
| |||
3899 | 3900 | | |
3900 | 3901 | | |
3901 | 3902 | | |
3902 | | - | |
| 3903 | + | |
3903 | 3904 | | |
3904 | 3905 | | |
3905 | 3906 | | |
| |||
4545 | 4546 | | |
4546 | 4547 | | |
4547 | 4548 | | |
4548 | | - | |
| 4549 | + | |
4549 | 4550 | | |
4550 | 4551 | | |
4551 | 4552 | | |
| |||
4562 | 4563 | | |
4563 | 4564 | | |
4564 | 4565 | | |
4565 | | - | |
4566 | | - | |
4567 | | - | |
| 4566 | + | |
| 4567 | + | |
| 4568 | + | |
| 4569 | + | |
| 4570 | + | |
| 4571 | + | |
4568 | 4572 | | |
4569 | 4573 | | |
4570 | 4574 | | |
4571 | | - | |
| 4575 | + | |
| 4576 | + | |
4572 | 4577 | | |
4573 | | - | |
| 4578 | + | |
4574 | 4579 | | |
4575 | 4580 | | |
4576 | 4581 | | |
| |||
0 commit comments