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:05:14 -0400 |
commit | a3b1c221893f739950e9232b4b789750f247cee5 (patch) | |
tree | d1344e6085c5c447cd3be46cf1dc615d72a355a4 /src | |
parent | d48bf6a94d295c3779c6af4df118d95a6606192f (diff) | |
download | postgresql-a3b1c221893f739950e9232b4b789750f247cee5.tar.gz postgresql-a3b1c221893f739950e9232b4b789750f247cee5.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 28216629aa4..0092f7d6fb2 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -4926,7 +4926,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 |