aboutsummaryrefslogtreecommitdiff
path: root/src/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/server.c b/src/server.c
index 5f2478a..9e2e465 100644
--- a/src/server.c
+++ b/src/server.c
@@ -40,17 +40,18 @@ static uint16_t port = DEFAULT_PORT;
static int server_socket;
-void __attribute__((noreturn)) error(const char *fmt, ...)
+#define SAVE_INTERVAL 8
+
+/* saves state periodically */
+void server_save_state(bool force)
{
- char buf[128];
- memset(buf, 0, sizeof(buf));
- va_list ap;
- va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
- va_end(ap);
- perror(buf);
- abort();
- exit(EXIT_FAILURE);
+ static int n = 0;
+ n = (n + 1) % SAVE_INTERVAL;
+ if(!n || force)
+ {
+ world_save(WORLDFILE);
+ userdb_write(USERFILE);
+ }
}
static void free_child_data(void *ptr)