]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - afs.c
afs.c: Add log message, cast sizeof().
[paraslash.git] / afs.c
diff --git a/afs.c b/afs.c
index 21148f0e7d8aca0cd40708d0f9d536f58769ad20..143103de98c2e63ab5c76528439e74bfc07edaba 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -512,8 +512,10 @@ static int setup_command_socket_or_die(void)
        unlink(socket_name);
        ret = create_local_socket(socket_name, &unix_addr,
                S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IWOTH);
-       if (ret < 0)
+       if (ret < 0) {
+               PARA_EMERG_LOG("%s: %s\n", PARA_STRERROR(-ret), socket_name);
                exit(EXIT_FAILURE);
+       }
        if (listen(ret , 5) < 0) {
                PARA_EMERG_LOG("%s", "can not listen on socket\n");
                exit(EXIT_FAILURE);
@@ -524,11 +526,13 @@ static int setup_command_socket_or_die(void)
 }
 
 static int server_socket;
+static struct command_task command_task_struct;
+static struct signal_task signal_task_struct;
 
-void loop(void)
+static void unregister_tasks(void)
 {
-       for (;;)
-               sleep(1);
+       unregister_task(&command_task_struct.task);
+       unregister_task(&signal_task_struct.task);
 }
 
 static void afs_shutdown(enum osl_close_flags flags)
@@ -563,13 +567,12 @@ static void signal_post_select(struct sched *s, struct task *t)
        t->ret = 1;
        if (st->signum == SIGUSR1)
                return; /* ignore SIGUSR1 */
-       afs_shutdown(OSL_MARK_CLEAN);
        t->ret = -E_SIGNAL_CAUGHT;
+       unregister_tasks();
 }
 
 static void register_signal_task(void)
 {
-       static struct signal_task signal_task_struct;
        struct signal_task *st = &signal_task_struct;
        st->fd = para_signal_init();
        PARA_INFO_LOG("signal pipe: fd %d\n", st->fd);
@@ -674,8 +677,8 @@ static void command_post_select(struct sched *s, struct task *t)
                goto out;
        }
        if (t->ret != sizeof(buf)) {
-               PARA_NOTICE_LOG("short read (%d bytes, expected %u)\n",
-                       t->ret, sizeof(buf));
+               PARA_NOTICE_LOG("short read (%d bytes, expected %lu)\n",
+                       t->ret, (long unsigned) sizeof(buf));
                t->ret = 1;
                goto out;
        }
@@ -705,7 +708,6 @@ out:
 
 static void register_command_task(uint32_t cookie)
 {
-       static struct command_task command_task_struct;
        struct command_task *ct = &command_task_struct;
        ct->fd = setup_command_socket_or_die();
        ct->cookie = cookie;
@@ -800,8 +802,9 @@ __noreturn int afs_init(uint32_t cookie, int socket_fd)
        s.default_timeout.tv_sec = 0;
        s.default_timeout.tv_usec = 99 * 1000;
        ret = sched(&s);
-       assert(ret < 0);
-       PARA_EMERG_LOG("%s\n", PARA_STRERROR(-ret));
+       if (ret < 0)
+               PARA_EMERG_LOG("%s\n", PARA_STRERROR(-ret));
+       afs_shutdown(OSL_MARK_CLEAN);
        exit(EXIT_FAILURE);
 }