mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-08 16:03:20 +00:00
reader_concurrency_semaphore: allow destroying without stop() when not used yet
To make it easier to construct objects with semaphore members. When the construction of such object fails, they can now just destroy their semaphore member as usual, without having to employ tricks to make sure its is stopped before.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user