return "Semaphore timedout";
}
+const char* semaphore_aborted::what() const noexcept {
+ return "Semaphore aborted";
+}
+
semaphore_timed_out semaphore_default_exception_factory::timeout() noexcept {
static_assert(std::is_nothrow_default_constructible_v<semaphore_timed_out>);
return semaphore_timed_out();
return broken_semaphore();
}
+semaphore_aborted semaphore_default_exception_factory::aborted() noexcept {
+ static_assert(std::is_nothrow_default_constructible_v<semaphore_aborted>);
+ return semaphore_aborted();
+}
+
// A factory of semaphore exceptions that contain additional context: the semaphore name
// auto sem = named_semaphore(0, named_semaphore_exception_factory{"file_opening_limit_semaphore"});
}
}
+named_semaphore_aborted::named_semaphore_aborted(std::string_view msg) noexcept : _msg() {
+ try {
+ _msg = format("Semaphore aborted: {}", msg);
+ } catch (...) {
+ // ignore, empty _msg will generate a static message in what().
+ }
+}
+
const char* named_semaphore_timed_out::what() const noexcept {
// return a static message if generating the dynamic message failed.
return _msg.empty() ? "Named semaphore timed out" : _msg.c_str();
return _msg.empty() ? "Broken named semaphore" : _msg.c_str();
}
+const char* named_semaphore_aborted::what() const noexcept {
+ // return a static message if generating the dynamic message failed.
+ return _msg.empty() ? "Named semaphore aborted" : _msg.c_str();
+}
+
named_semaphore_timed_out named_semaphore_exception_factory::timeout() const noexcept {
return named_semaphore_timed_out(name);
}
return broken_named_semaphore(name);
}
+named_semaphore_aborted named_semaphore_exception_factory::aborted() const noexcept {
+ return named_semaphore_aborted(name);
+}
+
} // namespace seastar