Mercurial > louis > mq > lightsd
changeset 410:1830822a9f63
blu blu
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Thu, 31 Dec 2015 10:27:59 +0100 |
parents | 6bc379a8f256 |
children | dadccf117097 |
files | dont_use_ev_assign.patch |
diffstat | 1 files changed, 23 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/dont_use_ev_assign.patch Thu Dec 31 10:14:10 2015 +0100 +++ b/dont_use_ev_assign.patch Thu Dec 31 10:27:59 2015 +0100 @@ -13,7 +13,7 @@ #include "lifx/wire_proto.h" #include "time_monotonic.h" -@@ -72,34 +71,16 @@ +@@ -72,36 +71,22 @@ struct event_base *lgtd_ev_base = NULL; @@ -44,14 +44,22 @@ static void lgtd_signal_event_callback(int signum, short events, void *ctx) { - assert(ctx); - -- // NOTE: syslog isn't signal safe, don't log anything in this function. +- assert(ctx); - +- // NOTE: syslog isn't signal safe, don't log anything in this function. ++ int i = (int)ctx; ++ assert(i >= 0); ++ assert(i < (int)LGTD_ARRAY_SIZE(lgtd_signals)); ++ assert(i < (int)LGTD_ARRAY_SIZE(lgtd_signal_evs)); ++ assert(signum == lgtd_signals[i]); + lgtd_last_signal_received = signum; - event_del((struct event *)ctx); // restore default behavior +- event_del((struct event *)ctx); // restore default behavior ++ event_del(lgtd_signal_evs[i]); // restore default behavior event_base_loopbreak(lgtd_ev_base); -@@ -126,20 +107,18 @@ + (void)events; + } +@@ -126,20 +111,21 @@ } static void @@ -64,16 +72,17 @@ - for (int i = 0; i != LGTD_ARRAY_SIZE(signals); i++) { - evsignal_assign( - &sigevs[i], -- lgtd_ev_base, ++ for (int i = 0; i != LGTD_ARRAY_SIZE(lgtd_signals); i++) { ++ lgtd_signal_evs[i] = evsignal_new( + lgtd_ev_base, - signals[i], -- lgtd_signal_event_callback, ++ lgtd_signals[i], + lgtd_signal_event_callback, - &sigevs[i] -+ for (intptr_t i = 0; i != LGTD_ARRAY_SIZE(lgtd_signals); i++) { -+ lgtd_signal_evs[i] = evsignal_new( + // event_self_cbarg() would make things cleaner, but this was + // unfortunately added in libevent 2.1 which hasn't been released + // as of 2016: -+ lgtd_ev_base, lgtd_signals[i], lgtd_signal_event_callback, (void *)i ++ (void *)(intptr_t)i // cast twice for -Wint-to-void-pointer-cast ); - evsignal_add(&sigevs[i], NULL); + if (!lgtd_signal_evs[i] || evsignal_add(lgtd_signal_evs[i], NULL)) { @@ -82,7 +91,7 @@ } struct sigaction act = { .sa_handler = SIG_IGN }; -@@ -149,6 +128,15 @@ +@@ -149,6 +135,15 @@ } static void @@ -98,7 +107,7 @@ lgtd_usage(const char *progname) { printf( -@@ -186,6 +174,26 @@ +@@ -186,6 +181,26 @@ exit(0); } @@ -125,7 +134,7 @@ int main(int argc, char *argv[], char *envp[]) { -@@ -195,7 +203,7 @@ +@@ -195,7 +210,7 @@ lgtd_daemon_setup_proctitle(argc, argv, envp); lgtd_configure_libevent();