Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 9c26a283 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

WIP: tryfix

parent c2fb35a0
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!95Process queue
......@@ -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);
......@@ -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");
if (check)
exit(EXIT_FAILURE);
else
return;
out_of_memory:
LOG_ERROR_SCT("DB", "%s", "Out of memory");
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 */
......
......@@ -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);
......
......@@ -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));
}
lkt_event
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter