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:05:14 -0400
commita3b1c221893f739950e9232b4b789750f247cee5 (patch)
treed1344e6085c5c447cd3be46cf1dc615d72a355a4 /src
parentd48bf6a94d295c3779c6af4df118d95a6606192f (diff)
downloadpostgresql-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.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 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