Fix race condition when sharing tuple descriptors.

Parallel query processes that called BlessTupleDesc() for identical
tuple descriptors at the same moment could crash.  There was code to
handle that rare case, but it dereferenced a bogus DSA pointer.  Repair.

Back-patch to 11, where commit cc5f8136 added support for sharing tuple
descriptors in parallel queries.

Reported-by: Eric Thinnes <e.thinnes@gmx.de>
Discussion: https://postgr.es/m/99aaa2eb-e194-bf07-c29a-1a76b4f2bcf9%40gmx.de
This commit is contained in:
Thomas Munro 2021-05-29 14:48:15 +12:00
parent d69fcb9cae
commit b1d6538903
1 changed files with 1 additions and 1 deletions

View File

@ -2822,7 +2822,7 @@ find_or_make_matching_shared_tupledesc(TupleDesc tupdesc)
Assert(record_table_entry->key.shared);
result = (TupleDesc)
dsa_get_address(CurrentSession->area,
record_table_entry->key.shared);
record_table_entry->key.u.shared_tupdesc);
Assert(result->tdrefcount == -1);
return result;