From 9c26a28374fde5cb857d0881815b03351457883e Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Wed, 13 May 2020 19:38:21 +0200 Subject: [PATCH] WIP: tryfix --- inc/common/queue.h | 2 +- src/database/open.c | 15 ++++++++++----- src/main/server.c | 3 +-- src/queue.c | 25 ++++++++++--------------- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/inc/common/queue.h b/inc/common/queue.h index 14187549..95899825 100644 --- a/inc/common/queue.h +++ b/inc/common/queue.h @@ -20,5 +20,5 @@ typedef struct { mqd_t lkt_queue_open(void); void lkt_queue_close(mqd_t queue); -void lkt_queue_send(enum lkt_event_type, void *attr); +void lkt_queue_send(mqd_t, enum lkt_event_type, void *attr); lkt_event lkt_queue_handle(mqd_t queue); diff --git a/src/database/open.c b/src/database/open.c index 6cc01a60..dbe7428c 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -55,7 +55,7 @@ database_close_all(void) } static inline void -__inc(volatile sqlite3 *db, const char *name) +__inc(volatile sqlite3 *db, const char *name, bool check) { SQLITE_EXEC(db, "UPDATE misc SET opened = (SELECT opened + 1 FROM misc);", error); @@ -76,10 +76,16 @@ __inc(volatile sqlite3 *db, const char *name) return; error: LOG_ERROR_SCT("DB", "%s", "Database already in use"); - exit(EXIT_FAILURE); + if (check) + exit(EXIT_FAILURE); + else + return; out_of_memory: LOG_ERROR_SCT("DB", "%s", "Out of memory"); - exit(EXIT_FAILURE); + if (check) + exit(EXIT_FAILURE); + else + return; } int @@ -192,8 +198,7 @@ retry: goto init; if (!__check_schema(db)) goto init; - if (check) - __inc(db, PROTECTED_DATABASE); + __inc(db, PROTECTED_DATABASE, check); return true; /* Need init */ diff --git a/src/main/server.c b/src/main/server.c index 3ba06e9e..71da9f5b 100644 --- a/src/main/server.c +++ b/src/main/server.c @@ -85,7 +85,6 @@ normal_launch: .queue = lkt_queue_open(), .kara_prefix = kara_dir, }; - memset(&srv, 0, sizeof(struct lkt_state)); /* Initialize the system. */ if (!database_new(&srv.db)) { @@ -131,7 +130,7 @@ normal_launch: char *env_current = env_get(LKT_ENV_CURRENT); if (env_current && !STR_MATCH(env_current, "NULL")) { LOG_INFO_SCT("INIT", "Restart playback from %s", env_current); - lkt_queue_send(lkt_event_play_pos, (void *) (size_t) strtol(env_current, NULL, 0)); + lkt_queue_send(srv.queue, lkt_event_play_pos, (void *) (size_t) strtol(env_current, NULL, 0)); } lkt_listen(&srv); diff --git a/src/queue.c b/src/queue.c index a7ae48a3..50849813 100644 --- a/src/queue.c +++ b/src/queue.c @@ -11,15 +11,16 @@ mqd_t lkt_queue_open(void) { - errno = 0; struct mq_attr attr = { .mq_flags = O_NONBLOCK, - .mq_maxmsg = 8, + .mq_maxmsg = 10, .mq_msgsize = sizeof(void *), - .mq_curmsgs = 1, + .mq_curmsgs = 0, }; - UNUSED(&attr); - mqd_t ret = mq_open(LEKTORD_QUEUE_NAME, O_RDWR | O_CREAT, 0622, &attr); + mq_unlink(LEKTORD_QUEUE_NAME); + errno = 0; + mqd_t ret = mq_open(LEKTORD_QUEUE_NAME, O_RDWR | O_CREAT | O_NONBLOCK, + 0666, &attr); switch (errno) { case 0: @@ -48,18 +49,12 @@ lkt_queue_close(mqd_t queue) } void -lkt_queue_send(enum lkt_event_type type, void *attr) +lkt_queue_send(mqd_t queue, enum lkt_event_type type, void *attr) { errno = 0; - mqd_t queue = mq_open(LEKTORD_QUEUE_NAME, O_WRONLY); - if (queue != (mqd_t) -1) { - if (mq_send(queue, attr, sizeof(void *), type)) - LOG_WARN_SCT("QUEUE", "Failed to send msg of type %d: %s", - type, strerror(errno)); - mq_close(queue); - } else - LOG_ERROR_SCT("QUEUE", "Failed to open queue '%s': %s", - LEKTORD_QUEUE_NAME, strerror(errno)); + if (mq_send(queue, attr, sizeof(void *), type)) + LOG_WARN_SCT("QUEUE", "Failed to send msg of type %d: %s", + type, strerror(errno)); } lkt_event -- GitLab