diff --git a/userspace/falco/atomic_signal_handler.h b/userspace/falco/atomic_signal_handler.h index 5630eb3c..f141d9b5 100644 --- a/userspace/falco/atomic_signal_handler.h +++ b/userspace/falco/atomic_signal_handler.h @@ -85,23 +85,21 @@ public: inline bool handle(std::function f) { if(triggered() && !handled()) { std::unique_lock lock(m_mtx); - if(!handled()) { - try { - f(); - // note: the action may have forcely reset - // the signal handler, so we don't want to create - // an inconsistent state - if(triggered()) { - m_handled.store(true, std::memory_order_seq_cst); - } - } catch(std::exception&) { - if(triggered()) { - m_handled.store(true, std::memory_order_seq_cst); - } - throw; + try { + f(); + // note: the action may have forcely reset + // the signal handler, so we don't want to create + // an inconsistent state + if(triggered()) { + m_handled.store(true, std::memory_order_seq_cst); } - return true; + } catch(std::exception&) { + if(triggered()) { + m_handled.store(true, std::memory_order_seq_cst); + } + throw; } + return true; } return false; }