Always check the return value of mark_fd_nonblocking().
[paraslash.git] / audiod.c
index f83943a..df725f9 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2008 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -264,7 +264,7 @@ int num_filters(int audio_format_num)
 
 static void filter_event_handler(struct task *t)
 {
-       PARA_NOTICE_LOG("%s\n", PARA_STRERROR(-t->ret));
+       PARA_NOTICE_LOG("%s\n", para_strerror(-t->ret));
        struct filter_chain *fc = t->private_data;
        fc->error = t->ret;
        unregister_task(t);
@@ -314,7 +314,7 @@ static void wng_event_handler(struct task *t)
 {
        struct writer_node_group *wng = t->private_data;
 
-       PARA_INFO_LOG("%s\n", PARA_STRERROR(-t->ret));
+       PARA_INFO_LOG("%s\n", para_strerror(-t->ret));
        wng->error = t->ret;
        wng_unregister(wng);
 }
@@ -350,7 +350,7 @@ static void open_writers(int slot_num)
        }
        ret = wng_open(s->wng);
        if (ret < 0) {
-               PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
+               PARA_ERROR_LOG("%s\n", para_strerror(-ret));
                return;
        }
        s->wstime = *now;
@@ -362,7 +362,7 @@ static void rn_event_handler(struct task *t)
        struct receiver_node *rn = t->private_data;
        int i;
 
-       PARA_NOTICE_LOG("%s\n", PARA_STRERROR(-t->ret));
+       PARA_NOTICE_LOG("%s\n", para_strerror(-t->ret));
        unregister_task(t);
        rn->error = t->ret;
        /* set restart barrier */
@@ -411,7 +411,7 @@ static int open_receiver(int format)
        register_task(&rn->task);
        return 1;
 err:
-       PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
+       PARA_ERROR_LOG("%s\n", para_strerror(-ret));
        tv_add(now, &restart_delay, &afi[format].restart_barrier);
        return ret;
 }
@@ -846,10 +846,11 @@ static int init_stream_io(void)
        return 1;
 }
 
+/* does not unlink socket on errors */
 static int audiod_get_socket(void)
 {
        struct sockaddr_un unix_addr;
-       int fd;
+       int ret, fd;
 
        if (conf.socket_given)
                socket_name = para_strdup(conf.socket_arg);
@@ -862,18 +863,22 @@ static int audiod_get_socket(void)
        PARA_NOTICE_LOG("local socket: %s\n", socket_name);
        if (conf.force_given)
                unlink(socket_name);
-       fd = create_local_socket(socket_name, &unix_addr,
-                       S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IWOTH);
-       if (fd < 0) {
-               PARA_EMERG_LOG("can not connect to socket\n");
-               exit(EXIT_FAILURE); /* do not unlink socket */
-       }
+       ret = create_local_socket(socket_name, &unix_addr,
+               S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IWOTH);
+       if (ret < 0)
+               goto err;
+       fd = ret;
        if (listen(fd , 5) < 0) {
-               PARA_EMERG_LOG("can not listen on socket\n");
-               exit(EXIT_FAILURE); /* do not unlink socket */
+               ret = -ERRNO_TO_PARA_ERROR(errno);
+               goto err;
        }
-       mark_fd_nonblocking(fd);
+       ret = mark_fd_nonblocking(fd);
+       if (ret < 0)
+               goto err;
        return fd;
+err:
+       PARA_EMERG_LOG("%s\n", para_strerror(-ret));
+       exit(EXIT_FAILURE);
 }
 
 static void signal_event_handler(struct task *t)
@@ -933,7 +938,7 @@ static void command_post_select(struct sched *s, struct task *t)
                return;
        ret = handle_connect(ct->fd);
        if (ret < 0)
-               PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
+               PARA_ERROR_LOG("%s\n", para_strerror(-ret));
 }
 
 static void init_command_task(struct command_task *ct)
@@ -1146,7 +1151,7 @@ int main(int argc, char *argv[])
        log_welcome("para_audiod", conf.loglevel_arg);
        i = init_stream_io();
        if (i < 0) {
-               PARA_EMERG_LOG("init stream io error: %s\n", PARA_STRERROR(-i));
+               PARA_EMERG_LOG("init stream io error: %s\n", para_strerror(-i));
                exit(EXIT_FAILURE);
        }
        server_uptime(UPTIME_SET);
@@ -1173,6 +1178,6 @@ int main(int argc, char *argv[])
        s.default_timeout.tv_usec = 99 * 1000;
        ret = schedule(&s);
 
-       PARA_EMERG_LOG("%s\n", PARA_STRERROR(-ret));
+       PARA_EMERG_LOG("%s\n", para_strerror(-ret));
        return EXIT_FAILURE;
 }