diff --git a/utils/large_bitset.cc b/utils/large_bitset.cc index f72893236b..161ffef18f 100644 --- a/utils/large_bitset.cc +++ b/utils/large_bitset.cc @@ -30,8 +30,15 @@ using namespace seastar; large_bitset::large_bitset(size_t nr_bits) : _nr_bits(nr_bits) { assert(thread::running_in_thread()); - size_t nr_ints = align_up(nr_bits, bits_per_int()) / bits_per_int(); - _storage.reserve(nr_ints); + const size_t orig_nr_ints = align_up(nr_bits, bits_per_int()) / bits_per_int(); + auto nr_ints = orig_nr_ints; + while (nr_ints) { + nr_ints = _storage.reserve_partial(nr_ints); + if (need_preempt()) { + thread::yield(); + } + } + nr_ints = orig_nr_ints; while (nr_ints) { _storage.push_back(0); --nr_ints;