Skip to content

Commit 586d14c

Browse files
committed
Restore original keybuf when iterating
1 parent fb84cf6 commit 586d14c

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

masstree_iterator.hh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ class basic_table<P>::iterator
5050
ikey_type x[(MASSTREE_MAXKEYLEN + sizeof(ikey_type) - 1)/sizeof(ikey_type)];
5151
char s[MASSTREE_MAXKEYLEN];
5252
} keybuf_;
53+
union {
54+
ikey_type x[(MASSTREE_MAXKEYLEN + sizeof(ikey_type) - 1)/sizeof(ikey_type)];
55+
char s[MASSTREE_MAXKEYLEN];
56+
} keybuf2_;
5357

5458
void advance(bool emit_equal = false);
5559

@@ -98,7 +102,10 @@ basic_table<P>::iterator::advance(bool emit_equal) {
98102
Str suffix;
99103
char suffixbuf[MASSTREE_MAXKEYLEN];
100104

105+
memcpy(keybuf2_.s, keybuf_.s, sizeof(keybuf_));
106+
101107
retry_root:
108+
memcpy(keybuf_.s, keybuf2_.s, sizeof(keybuf2_));
102109
ka_.unshift_all();
103110
root = table_->root();
104111
n = root->reach_leaf(ka_, v, *ti_);

0 commit comments

Comments
 (0)