summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lem/signal/core.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/lem/signal/core.c b/lem/signal/core.c
index dacf4ea..285cdb1 100644
--- a/lem/signal/core.c
+++ b/lem/signal/core.c
@@ -83,7 +83,10 @@ signal_os_watch(lua_State *T, int sig)
s = lem_xmalloc(sizeof(struct sigwatcher));
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
ev_signal_init(&s->w, signal_os_handler, sig);
+#pragma GCC diagnostic pop
ev_set_priority(&s->w, EV_MAXPRI);
ev_signal_start(LEM_ &s->w);
ev_unref(LEM); /* watcher shouldn't keep loop alive */
@@ -196,9 +199,18 @@ signal_child_handler(EV_P_ struct ev_child *w, int revents)
}
static int
+is_child_active(void)
+{
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
+ return ev_is_active(&signal_child_watcher);
+#pragma GCC diagnostic pop
+}
+
+static int
signal_child_watch(lua_State *T)
{
- if (!ev_is_active(&signal_child_watcher)) {
+ if (!is_child_active()) {
ev_child_start(LEM_ &signal_child_watcher);
ev_unref(LEM); /* watcher shouldn't keep loop alive */
}
@@ -209,7 +221,7 @@ signal_child_watch(lua_State *T)
static int
signal_child_unwatch(lua_State *T)
{
- if (ev_is_active(&signal_child_watcher)) {
+ if (is_child_active()) {
ev_ref(LEM);
ev_child_stop(LEM_ &signal_child_watcher);
}
@@ -325,7 +337,10 @@ int
luaopen_lem_signal_core(lua_State *T)
{
#if EV_CHILD_ENABLE
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
ev_child_init(&signal_child_watcher, signal_child_handler, 0, 1);
+#pragma GCC diagnostic pop
#endif
#if EV_SIGNAL_ENABLE