async: context: remove pending_exception handling
With the move from scope to exec::async_scope there is no possibility
for pending-exceptions so clean up all the associated code.
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I6f110d0641b9ba566e480f8e43eb90976e2b3c93
diff --git a/include/sdbusplus/async/context.hpp b/include/sdbusplus/async/context.hpp
index 9101df3..96cb38d 100644
--- a/include/sdbusplus/async/context.hpp
+++ b/include/sdbusplus/async/context.hpp
@@ -6,7 +6,6 @@
#include <sdbusplus/event.hpp>
#include <condition_variable>
-#include <deque>
#include <mutex>
#include <stop_token>
#include <thread>
@@ -108,7 +107,6 @@
std::mutex lock{};
std::condition_variable caller_wait{};
- std::deque<std::exception_ptr> pending_exceptions = {};
bool spawn_watcher_running = false;
/** Completion object to signal the worker that 'sd_bus_wait' is done. */
@@ -117,12 +115,11 @@
bool wait_process_stopped = false;
void worker_run();
- void spawn_complete(std::exception_ptr&& = {});
+ void spawn_complete();
void check_stop_requested();
void spawn_watcher();
void caller_run();
- void rethrow_pending_exception();
void wait_for_wait_process_stopped();
static int dbus_event_handle(sd_event_source*, int, uint32_t, void*);
diff --git a/src/async/context.cpp b/src/async/context.cpp
index 85e0200..c8f7e5f 100644
--- a/src/async/context.cpp
+++ b/src/async/context.cpp
@@ -137,10 +137,7 @@
// Run the primary portion of the run-loop.
caller_run();
- // Rethrow the pending exception (if it exists).
- rethrow_pending_exception();
-
- // Otherwise this should be final_stop...
+ // This should be final_stop...
// We need to wait for the pending wait process and stop it.
wait_for_wait_process_stopped();
@@ -155,9 +152,6 @@
{
worker_thread.join();
}
-
- // Check for one last exception.
- rethrow_pending_exception();
}
void context::worker_run()
@@ -169,16 +163,11 @@
loop.run();
}
-void context::spawn_complete(std::exception_ptr&& e)
+void context::spawn_complete()
{
{
std::lock_guard l{lock};
spawn_watcher_running = false;
-
- if (e)
- {
- pending_exceptions.emplace_back(std::move(e));
- }
}
if (stop_requested())
@@ -222,7 +211,7 @@
// we get an exception.
auto keep_running = [this]() {
std::lock_guard l{lock};
- return !final_stop.stop_requested() && pending_exceptions.empty();
+ return !final_stop.stop_requested();
};
// If we are suppose to keep running, start the run loop.
@@ -235,8 +224,8 @@
}
else
{
- // We've already been running and there might an exception or
- // completion pending. Spawn a new watcher that checks for these.
+ // We've already been running and there might a completion pending.
+ // Spawn a new watcher that checks for these.
spawn_watcher();
}
@@ -248,7 +237,8 @@
}
else
{
- // There might be pending exceptions still, so spawn a watcher for them.
+ // There might be pending completions still, so spawn a watcher for
+ // them.
spawn_watcher();
}
}
@@ -277,19 +267,6 @@
}
}
-void context::rethrow_pending_exception()
-{
- {
- std::lock_guard l{lock};
- if (!pending_exceptions.empty())
- {
- auto e = pending_exceptions.front();
- pending_exceptions.pop_front();
- std::rethrow_exception(std::move(e));
- }
- }
-}
-
void details::wait_process_completion::arm() noexcept
{
// Call process. True indicates something was handled and we do not
@@ -336,8 +313,7 @@
// don't have the required parameters).
ctx.caller_wait.wait(lock, [&] {
return (ctx.pending != nullptr) || (ctx.staged != nullptr) ||
- ctx.final_stop.stop_requested() ||
- !ctx.pending_exceptions.empty();
+ ctx.final_stop.stop_requested();
});
// Save the waiter as pending.