aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2021-05-29 14:48:15 +1200
committerThomas Munro <tmunro@postgresql.org>2021-05-29 15:16:15 +1200
commita15d84470db8f42d3850a007dfa166d3fce5bc66 (patch)
treec2e1498dfb723988eb79df73be9b4d0c1e906578
parenta44a2b9acfdcff3ba12eea7b6c10b8c1b6182e3f (diff)
downloadpostgresql-a15d84470db8f42d3850a007dfa166d3fce5bc66.tar.gz
postgresql-a15d84470db8f42d3850a007dfa166d3fce5bc66.zip
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
-rw-r--r--src/backend/utils/cache/typcache.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c
index 0fe06fd7c8b..65ca726c5ec 100644
--- a/src/backend/utils/cache/typcache.c
+++ b/src/backend/utils/cache/typcache.c
@@ -2606,7 +2606,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;