1 #include <sdeventplus/internal/sdevent.hpp> 2 #include <sdeventplus/internal/utils.hpp> 3 #include <sdeventplus/source/signal.hpp> 4 #include <type_traits> 5 #include <utility> 6 7 namespace sdeventplus 8 { 9 namespace source 10 { 11 12 Signal::Signal(const Event& event, int sig, Callback&& callback) : 13 Base(event, create_source(event, sig), std::false_type()), 14 callback(std::move(callback)) 15 { 16 } 17 18 void Signal::set_callback(Callback&& callback) 19 { 20 this->callback = std::move(callback); 21 } 22 23 int Signal::get_signal() const 24 { 25 return internal::callCheck("sd_event_source_get_signal", 26 &internal::SdEvent::sd_event_source_get_signal, 27 event.getSdEvent(), get()); 28 } 29 30 const Signal::Callback& Signal::get_callback() const 31 { 32 return callback; 33 } 34 35 sd_event_source* Signal::create_source(const Event& event, int sig) 36 { 37 sd_event_source* source; 38 internal::callCheck( 39 "sd_event_add_signal", &internal::SdEvent::sd_event_add_signal, 40 event.getSdEvent(), event.get(), &source, sig, signalCallback, nullptr); 41 return source; 42 } 43 44 int Signal::signalCallback(sd_event_source* source, 45 const struct signalfd_siginfo* si, void* userdata) 46 { 47 return sourceCallback<Callback, Signal, &Signal::get_callback>( 48 "signalCallback", source, userdata, si); 49 } 50 51 } // namespace source 52 } // namespace sdeventplus 53