diff --git a/reader_concurrency_semaphore.cc b/reader_concurrency_semaphore.cc index 4781f3a21f..1e743bbe36 100644 --- a/reader_concurrency_semaphore.cc +++ b/reader_concurrency_semaphore.cc @@ -410,6 +410,10 @@ reader_concurrency_semaphore::reader_concurrency_semaphore(no_limits, sstring na std::move(name)) {} reader_concurrency_semaphore::~reader_concurrency_semaphore() { + if (!_permit_list->stats.total_permits) { + // We allow destroy without stop() when the semaphore wasn't used at all yet. + return; + } assert(_stopped); } diff --git a/test/boost/reader_concurrency_semaphore_test.cc b/test/boost/reader_concurrency_semaphore_test.cc index a706a8983f..b10d004f6b 100644 --- a/test/boost/reader_concurrency_semaphore_test.cc +++ b/test/boost/reader_concurrency_semaphore_test.cc @@ -554,6 +554,12 @@ SEASTAR_THREAD_TEST_CASE(reader_concurrency_semaphore_dump_reader_diganostics) { } SEASTAR_THREAD_TEST_CASE(test_reader_concurrency_semaphore_stop_waits_on_permits) { + BOOST_TEST_MESSAGE("unused"); + { + reader_concurrency_semaphore semaphore(reader_concurrency_semaphore::no_limits{}, get_name()); + // Checks for stop() should not be triggered. + } + BOOST_TEST_MESSAGE("0 permits"); { reader_concurrency_semaphore semaphore(reader_concurrency_semaphore::no_limits{}, get_name());