aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2017-10-13 14:53:28 -0400
committerRobert Haas <rhaas@postgresql.org>2017-10-13 15:02:45 -0400
commit6393613b6a1e0feae3d22af608397b252cee5b58 (patch)
tree9c084ede26c01f0bc8fb7c39e4001c05248e50b8 /src
parent73937119bfd07a140da4817f5ca949351942ffdc (diff)
downloadpostgresql-6393613b6a1e0feae3d22af608397b252cee5b58.tar.gz
postgresql-6393613b6a1e0feae3d22af608397b252cee5b58.zip
Fix possible crash with Parallel Bitmap Heap Scan.
If a Parallel Bitmap Heap scan's chain of leftmost descendents includes a BitmapOr whose first child is a BitmapAnd, the prior coding would mistakenly create a non-shared TIDBitmap and then try to perform shared iteration. Report by Tomas Vondra. Patch by Dilip Kumar. Discussion: http://postgr.es/m/50e89684-8ad9-dead-8767-c9545bafd3b6@2ndquadrant.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/plan/createplan.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 792ea84a818..c802d61c39e 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -4933,7 +4933,11 @@ bitmap_subplan_mark_shared(Plan *plan)
bitmap_subplan_mark_shared(
linitial(((BitmapAnd *) plan)->bitmapplans));
else if (IsA(plan, BitmapOr))
+ {
((BitmapOr *) plan)->isshared = true;
+ bitmap_subplan_mark_shared(
+ linitial(((BitmapOr *) plan)->bitmapplans));
+ }
else if (IsA(plan, BitmapIndexScan))
((BitmapIndexScan *) plan)->isshared = true;
else