From f725536d568a375103b063458f6e6d79233b522d Mon Sep 17 00:00:00 2001 From: Matt Witherspoon <32485495+spoonincode@users.noreply.github.com> Date: Wed, 20 Mar 2024 15:44:22 -0400 Subject: [PATCH] replace lambda with function since we're going to longjmp out of this function, probably best to stay as trivial as possible --- include/eosio/vm/signals.hpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/include/eosio/vm/signals.hpp b/include/eosio/vm/signals.hpp index 7387dea..b5a5312 100644 --- a/include/eosio/vm/signals.hpp +++ b/include/eosio/vm/signals.hpp @@ -27,22 +27,22 @@ namespace eosio { namespace vm { template inline struct sigaction prev_signal_handler; - inline void signal_handler(int sig, siginfo_t* info, void* uap) { - sigjmp_buf* dest = std::atomic_load(&signal_dest); + inline bool in_protected_range(void* addr) { + //empty protection list means legacy catch-all behavior; useful for some of the old tests + if(protected_memory_ranges.empty()) + return true; - auto in_protected_range = [&]() { - //empty protection list means legacy catch-all behavior; useful for some of the old tests - if(protected_memory_ranges.empty()) + for(const std::span& range : protected_memory_ranges) { + if(addr >= range.data() && addr < range.data() + range.size()) return true; + } + return false; + } - for(const std::span& range : protected_memory_ranges) { - if(info->si_addr >= range.data() && info->si_addr < range.data() + range.size()) - return true; - } - return false; - }; + inline void signal_handler(int sig, siginfo_t* info, void* uap) { + sigjmp_buf* dest = std::atomic_load(&signal_dest); - if (dest && in_protected_range()) { + if (dest && in_protected_range(info->si_addr)) { siglongjmp(*dest, sig); } else { struct sigaction* prev_action;