Skip to content

Commit 13f792e

Browse files
committed
Fix bug where an item was not added to the delta view of the sharing map
The bug could appear when there are hash collisions between the keys stored in the sharing map.
1 parent f2733dc commit 13f792e

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/util/sharing_map.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -844,6 +844,8 @@ SHARING_MAPT(void)::add_item_if_not_shared(
844844
}
845845
}
846846

847+
delta_view.push_back({k, l1.get_value()});
848+
847849
return;
848850
}
849851

unit/util/sharing_map.cpp

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -499,22 +499,43 @@ TEST_CASE("Sharing map collisions", "[core][util]")
499499

500500
sharing_map_collisionst sm;
501501

502-
sm.insert(some_keyt(0), "a");
503-
sm.insert(some_keyt(8), "b");
504-
sm.insert(some_keyt(16), "c");
502+
SECTION("Basic")
503+
{
504+
sm.insert(some_keyt(0), "a");
505+
sm.insert(some_keyt(8), "b");
506+
sm.insert(some_keyt(16), "c");
507+
508+
sm.insert(some_keyt(1), "d");
509+
sm.insert(some_keyt(2), "e");
510+
511+
sm.erase(some_keyt(8));
505512

506-
sm.insert(some_keyt(1), "d");
507-
sm.insert(some_keyt(2), "e");
513+
REQUIRE(sm.has_key(some_keyt(0)));
514+
REQUIRE(sm.has_key(some_keyt(16)));
508515

509-
sm.erase(some_keyt(8));
516+
REQUIRE(sm.has_key(some_keyt(1)));
517+
REQUIRE(sm.has_key(some_keyt(2)));
510518

511-
REQUIRE(sm.has_key(some_keyt(0)));
512-
REQUIRE(sm.has_key(some_keyt(16)));
519+
REQUIRE(!sm.has_key(some_keyt(8)));
520+
}
521+
522+
SECTION("Delta view")
523+
{
524+
sm.insert(some_keyt(0), "a");
513525

514-
REQUIRE(sm.has_key(some_keyt(1)));
515-
REQUIRE(sm.has_key(some_keyt(2)));
526+
sharing_map_collisionst sm2;
516527

517-
REQUIRE(!sm.has_key(some_keyt(8)));
528+
sm2.insert(some_keyt(8), "b");
529+
sm2.insert(some_keyt(16), "c");
530+
531+
sharing_map_collisionst::delta_viewt delta_view;
532+
533+
sm.get_delta_view(sm2, delta_view, false);
534+
535+
REQUIRE(delta_view.size() == 1);
536+
REQUIRE(delta_view[0].k == some_keyt(0));
537+
REQUIRE(!delta_view[0].is_in_both_maps());
538+
}
518539
}
519540

520541
TEST_CASE("Sharing map views and iteration", "[core][util]")

0 commit comments

Comments
 (0)