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:
parent
bb18bc2249
commit
d41fda6aa3
2
src/backend/utils/cache/typcache.c
vendored
2
src/backend/utils/cache/typcache.c
vendored
@ -2707,7 +2707,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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user