]> git.lizzy.rs Git - dragonblocks_alpha.git/commitdiff
Use dragonstd flags
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 13 Feb 2022 15:27:53 +0000 (16:27 +0100)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 13 Feb 2022 15:27:53 +0000 (16:27 +0100)
12 files changed:
deps/dragonstd
src/CMakeLists.txt
src/client/client.c
src/client/client_auth.c
src/client/game.c
src/interrupt.c [new file with mode: 0644]
src/interrupt.h [new file with mode: 0644]
src/server/server.c
src/server/server_map.c
src/signal_handlers.c [deleted file]
src/signal_handlers.h [deleted file]
src/util.h

index 39b52e8cfa889d55008f2edd0933d6b421556c34..4e1758fbf2261950df0d323460e7fbf35d402dd5 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 39b52e8cfa889d55008f2edd0933d6b421556c34
+Subproject commit 4e1758fbf2261950df0d323460e7fbf35d402dd5
index 7c96075e5bbc833e3754cbb4abac09f37196290d..879bec10c9446e9a32a3f6a13a12ecccdaac4245 100644 (file)
@@ -60,6 +60,7 @@ set(COMMON_SOURCES
        "${DEPS_DIR}/dragonport/asprintf.c"
        "${DEPS_DIR}/dragonstd/array.c"
        "${DEPS_DIR}/dragonstd/bintree.c"
+       "${DEPS_DIR}/dragonstd/flag.c"
        "${DEPS_DIR}/dragonstd/list.c"
        "${DEPS_DIR}/dragonstd/queue.c"
        "${DEPS_DIR}/linenoise/linenoise.c"
@@ -67,10 +68,10 @@ set(COMMON_SOURCES
        config.c
        day.c
        environment.c
+       interrupt.c
        map.c
        node.c
        perlin.c
-       signal_handlers.c
        types.c
        util.c
 )
index 80af198a78d513a043143bfe7e589764e5399495..04364af9dc14172d19cc4772347b9d479d1114a7 100644 (file)
@@ -2,6 +2,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <dragonstd/flag.h>
 #include "client/client.h"
 #include "client/client_auth.h"
 #include "client/client_map.h"
 #include "client/game.h"
 #include "client/input.h"
 #include "day.h"
-#include "signal_handlers.h"
+#include "interrupt.h"
 #include "perlin.h"
 #include "types.h"
 #include "util.h"
 
 DragonnetPeer *client;
-
-static volatile bool finished = false;
+static Flag *finish;
 
 static bool on_recv(unused DragonnetPeer *peer, DragonnetTypeId type, unused void *pkt)
 {
-       while (client_auth.state == AUTH_INIT)
-               sched_yield();
-
        return (client_auth.state == AUTH_WAIT) == (type == DRAGONNET_TYPE_ToClientAuth);
 }
 
 static void on_disconnect(unused DragonnetPeer *peer)
 {
-       interrupted = true;
-
-       while (! finished)
-               sched_yield();
+       flag_set(interrupt);
+       flag_wait(finish);
 }
 
 static void on_ToClientAuth(unused DragonnetPeer *peer, ToClientAuth *pkt)
@@ -89,7 +84,9 @@ int main(int argc, char **argv)
        client->on_recv_type[DRAGONNET_TYPE_ToClientPos      ] = (void *) &on_ToClientPos;
        client->on_recv_type[DRAGONNET_TYPE_ToClientTimeOfDay] = (void *) &on_ToClientTimeOfDay;
 
-       signal_handlers_init();
+       finish = flag_create();
+
+       interrupt_init();
        client_map_init();
        client_player_init();
        dragonnet_peer_run(client);
@@ -104,10 +101,14 @@ int main(int argc, char **argv)
        client_auth_deinit();
        client_player_deinit();
        client_map_deinit();
+       interrupt_deinit();
 
        pthread_t recv_thread = client->recv_thread;
-       finished = true;
+
+       flag_set(finish);
        pthread_join(recv_thread, NULL);
 
+       flag_delete(finish);
+
        return EXIT_SUCCESS;
 }
index 1e76d319787201626f9e616d93c1a3dd787fa518..d2db7e042b4ac04b4470d30300b43482e5b7d746 100644 (file)
@@ -3,7 +3,7 @@
 #include <linenoise/linenoise.h>
 #include "client.h"
 #include "client_auth.h"
-#include "signal_handlers.h"
+#include "interrupt.h"
 #include "types.h"
 
 volatile struct ClientAuth client_auth;
@@ -13,13 +13,13 @@ static bool name_prompt()
        if (! (client_auth.name = linenoise("Enter name: ")))
                return false;
 
+       printf("Authenticating as %s...\n", client_auth.name);
+       client_auth.state = AUTH_WAIT;
+
        dragonnet_peer_send_ToServerAuth(client, &(ToServerAuth) {
                .name = client_auth.name,
        });
 
-       printf("Authenticating as %s...\n", client_auth.name);
-       client_auth.state = AUTH_WAIT;
-
        return true;
 }
 
@@ -27,7 +27,7 @@ bool client_auth_init()
 {
        client_auth.state = AUTH_INIT;
 
-       while (! interrupted) {
+       while (! interrupt->done) {
                switch (client_auth.state) {
                        case AUTH_INIT:
                                if (name_prompt())
index 1ea39b347f6c153cc92e0ca74f99c828259e4962..02216ac0b40a93a2493b8635946ed67fcaf04e52 100644 (file)
@@ -18,7 +18,7 @@
 #include "client/sky.h"
 #include "client/window.h"
 #include "day.h"
-#include "signal_handlers.h"
+#include "interrupt.h"
 
 int window_width, window_height;
 
@@ -67,7 +67,7 @@ static void game_loop()
        struct timespec ts, ts_old;
        clock_gettime(CLOCK_REALTIME, &ts_old);
 
-       while (! glfwWindowShouldClose(window.handle) && ! interrupted) {
+       while (! glfwWindowShouldClose(window.handle) && ! interrupt->done) {
                clock_gettime(CLOCK_REALTIME, &ts);
                f64 dtime = (f64) (ts.tv_sec - ts_old.tv_sec) + (f64) (ts.tv_nsec - ts_old.tv_nsec) / 1.0e9;
                ts_old = ts;
diff --git a/src/interrupt.c b/src/interrupt.c
new file mode 100644 (file)
index 0000000..2fb1d01
--- /dev/null
@@ -0,0 +1,27 @@
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include "interrupt.h"
+
+Flag *interrupt;
+static struct sigaction sa = {0};
+
+static void interrupt_handler(int sig)
+{
+       fprintf(stderr, "%s\n", strsignal(sig));
+       flag_set(interrupt);
+}
+
+void interrupt_init()
+{
+       interrupt = flag_create();
+
+       sa.sa_handler = &interrupt_handler;
+       sigaction(SIGINT, &sa, NULL);
+       sigaction(SIGTERM, &sa, NULL);
+}
+
+void interrupt_deinit()
+{
+       flag_delete(interrupt);
+}
diff --git a/src/interrupt.h b/src/interrupt.h
new file mode 100644 (file)
index 0000000..489a264
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _INTERRUPT_H_
+#define _INTERRUPT_H_
+
+#include <dragonstd/flag.h>
+
+extern Flag *interrupt;
+
+void interrupt_init();
+void interrupt_deinit();
+
+#endif
index a3587f2a7beed587ee9266eef364b9264749b5e9..37974fb5ba453a3a2d102310c3ad8769f8a90b74 100644 (file)
@@ -1,11 +1,11 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <dragonnet/addr.h>
+#include "interrupt.h"
 #include "server/database.h"
 #include "server/server.h"
 #include "server/server_map.h"
 #include "server/server_player.h"
-#include "signal_handlers.h"
 #include "util.h"
 
 DragonnetListener *server;
@@ -69,23 +69,23 @@ int main(int argc, char **argv)
        server->on_recv_type[DRAGONNET_TYPE_ToServerPos] =          (void *) &on_ToServerPos;
        server->on_recv_type[DRAGONNET_TYPE_ToServerRequestBlock] = (void *) &on_ToServerRequestBlock;
 
-       signal_handlers_init();
-
+       interrupt_init();
        server_player_init();
        database_init();
        server_map_init();
+
        server_map_prepare_spawn();
        dragonnet_listener_run(server);
 
-       while (! interrupted)
-               sched_yield();
+       flag_wait(interrupt);
 
        printf("Shutting down\n");
-
        dragonnet_listener_close(server);
+
        server_map_deinit();
        database_deinit();
        server_player_deinit();
+       interrupt_deinit();
 
        dragonnet_listener_delete(server);
 
index 68bd9eca1d99453fcc5811d45f643c0f880bee85..3cadbc19b3568f4a23e57af1a18683caa14bdaac 100644 (file)
@@ -2,12 +2,12 @@
 #include <string.h>
 #include <unistd.h>
 #include <stdio.h>
+#include "interrupt.h"
 #include "map.h"
 #include "server/database.h"
 #include "server/mapgen.h"
 #include "server/server_config.h"
 #include "server/server_map.h"
-#include "signal_handlers.h"
 #include "util.h"
 
 struct ServerMap server_map;
@@ -341,7 +341,7 @@ void server_map_prepare_spawn()
        for (s32 x = -dist; x <= (s32) dist; x++) {
                for (s32 y = -dist; y <= (s32) dist; y++) {
                        for (s32 z = -dist; z <= (s32) dist; z++) {
-                               if (interrupted) {
+                               if (interrupt->done) {
                                        join_mapgen_threads();
                                        return;
                                }
diff --git a/src/signal_handlers.c b/src/signal_handlers.c
deleted file mode 100644 (file)
index fa3a0f7..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include "signal_handlers.h"
-#include "util.h"
-
-bool interrupted = false;
-
-static void interrupt_handler(int sig)
-{
-       interrupted = true;
-       fprintf(stderr, "%s\n", strsignal(sig));
-}
-
-static void silent_handler(unused int sig)
-{
-}
-
-static struct sigaction sigact_interrupt = {0};
-static struct sigaction sigact_silent = {0};
-
-void signal_handlers_init()
-{
-       sigact_interrupt.sa_handler = &interrupt_handler;
-       sigaction(SIGINT, &sigact_interrupt, NULL);
-       sigaction(SIGTERM, &sigact_interrupt, NULL);
-
-       sigact_silent.sa_handler = &silent_handler;
-       sigaction(SIGPIPE, &sigact_silent, NULL);
-}
diff --git a/src/signal_handlers.h b/src/signal_handlers.h
deleted file mode 100644 (file)
index f5665d4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _SIGNAL_HANDLERS_H_
-#define _SIGNAL_HANDLERS_H_
-
-#include <stdbool.h>
-
-extern bool interrupted;
-void signal_handlers_init();
-
-#endif
index f8b0459ffd823e8b8ec4f21565d2e27c534682e2..64e72878311bfce677b4560287ea2c370f4fa09c 100644 (file)
@@ -1,8 +1,6 @@
 #ifndef _UTIL_H_
 #define _UTIL_H_
 
-#define ever (;;)                                                            // infinite for loop with style
-#define INBRACES(str) (str) ? "(" : "", (str) ? (str) : "", (str) ? ")" : "" // wrapper for printf to optionally add a message in braces if message is not NULL
 #define CMPBOUNDS(x) ((x) == 0 ? 0 : (x) > 0 ? 1 : -1)                       // resolves to 1 if x > 0, 0 if x == 0 and -1 if x < 0
 #define fallthrough __attribute__ ((fallthrough))                            // prevent compiler warning about implicit fallthrough with style
 #define unused __attribute__ ((unused))