fix_DiscreteKnapsack.patch

text/plain

Filename: fix_DiscreteKnapsack.patch
Type: text/plain
Part: 0
Message: Strange Bitmapset manipulation in DiscreteKnapsack()

Patch

Format: unified
File+
src/backend/lib/knapsack.c 3 3
diff --git a/src/backend/lib/knapsack.c b/src/backend/lib/knapsack.c
index 13d800718f..b2f32fdd60 100644
--- a/src/backend/lib/knapsack.c
+++ b/src/backend/lib/knapsack.c
@@ -87,11 +87,11 @@ DiscreteKnapsack(int max_weight, int num_items,
 
 			if (values[j] <= values[ow] + iv)
 			{
-				/* copy sets[ow] to sets[j] without realloc */
+				/* copy sets[ow] to sets[j] */
 				if (j != ow)
 				{
-					sets[j] = bms_del_members(sets[j], sets[j]);
-					sets[j] = bms_add_members(sets[j], sets[ow]);
+					bms_free(sets[j]);
+					sets[j] = bms_copy(sets[ow]);
 				}
 
 				sets[j] = bms_add_member(sets[j], i);