diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-10-13 14:53:28 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-10-13 15:02:45 -0400 |
commit | 6393613b6a1e0feae3d22af608397b252cee5b58 (patch) | |
tree | 9c084ede26c01f0bc8fb7c39e4001c05248e50b8 /src | |
parent | 73937119bfd07a140da4817f5ca949351942ffdc (diff) | |
download | postgresql-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.c | 4 |
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 |