]> git.meshlink.io Git - meshlink/commitdiff
Check for the presence of stdatomic.h before using it.
authorGuus Sliepen <guus@meshlink.io>
Tue, 7 Jul 2020 08:26:21 +0000 (10:26 +0200)
committerGuus Sliepen <guus@meshlink.io>
Tue, 7 Jul 2020 08:26:42 +0000 (10:26 +0200)
configure.ac
src/adns.c
src/event.c
src/event.h
src/have.h

index 1047dc1b7101b69f3419f3c244bc306403305d0e..f9a93259e7ceb7d3b2adc1a15d55e0f3750acbc9 100644 (file)
@@ -123,7 +123,7 @@ AM_CONDITIONAL(INSTALL_TESTS, test "$install_tests" = true)
 dnl Checks for header files.
 dnl We do this in multiple stages, because unlike Linux all the other operating systems really suck and don't include their own dependencies.
 
-AC_CHECK_HEADERS([syslog.h sys/file.h sys/param.h sys/resource.h sys/socket.h sys/time.h sys/un.h sys/wait.h netdb.h arpa/inet.h dirent.h curses.h ifaddrs.h])
+AC_CHECK_HEADERS([syslog.h sys/file.h sys/param.h sys/resource.h sys/socket.h sys/time.h sys/un.h sys/wait.h netdb.h arpa/inet.h dirent.h curses.h ifaddrs.h stdatomic.h])
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 MeshLink_ATTRIBUTE(__malloc__)
index cae8234f499d506d8dedb2ed02a47c9f3ba1cd59..758c08088bd5f6fbbe97b23afae94f1143fbbed5 100644 (file)
@@ -20,7 +20,6 @@
 #include "system.h"
 
 #include <pthread.h>
-#include <stdatomic.h>
 
 #include "adns.h"
 #include "devtools.h"
index 8ceab36240224ab8192a80071469ff8160f0cba0..a7c1f25a3f3b9b05edd94a6ee579b818dd5b3412 100644 (file)
@@ -199,7 +199,9 @@ static void signalio_handler(event_loop_t *loop, void *data, int flags) {
        });
 
        if(sig) {
+#ifdef HAVE_STDATOMIC_H
                atomic_flag_clear(&sig->set);
+#endif
                sig->cb(loop, sig->data);
        }
 }
@@ -224,10 +226,14 @@ static void pipe_exit(event_loop_t *loop) {
 }
 
 void signal_trigger(event_loop_t *loop, signal_t *sig) {
+#ifdef HAVE_STDATOMIC_H
+
        if(atomic_flag_test_and_set(&sig->set)) {
                return;
        }
 
+#endif
+
        uint8_t signum = sig->signum;
        write(loop->pipefd[1], &signum, 1);
        return;
@@ -241,7 +247,9 @@ void signal_add(event_loop_t *loop, signal_t *sig, signal_cb_t cb, void *data, u
        sig->signum = signum;
        sig->node.data = sig;
 
+#ifdef HAVE_STDATOMIC_H
        atomic_flag_clear(&sig->set);
+#endif
 
        if(loop->pipefd[0] == -1) {
                pipe_init(loop);
index ce6701ac441491cce83fe2f67717fb8d9c8097a7..bec32045e0bf501bd9c39985870b6d9d0268b82f 100644 (file)
@@ -52,7 +52,9 @@ typedef struct timeout_t {
 typedef struct signal_t {
        struct splay_node_t node;
        int signum;
+#ifdef HAVE_STDATOMIC_H
        volatile atomic_flag set;
+#endif
        signal_cb_t cb;
        void *data;
 } signal_t;
index c0686a54ec6fdd26be2e2d312a4d09be34fd0f27..e7da316771d5ae6868faccfb2ebfcd0f2938d82b 100644 (file)
@@ -32,7 +32,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include <stdatomic.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <inttypes.h>
 #include <limits.h>
 #include <assert.h>
 
+#ifdef HAVE_STDATOMIC_H
+#include <stdatomic.h>
+#endif
+
 #ifdef HAVE_MINGW
 #include <w32api.h>
 #include <winsock2.h>