sched: Kill old ->post_select variant.
[paraslash.git] / afs.c
diff --git a/afs.c b/afs.c
index 1f3fafacec1c757b47659c77d2bf2da1062e3cbf..9cc075f60195a889c68909705e1166c226eb2bb1 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2012 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2013 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -87,7 +87,7 @@ static struct command_task command_task_struct;
 static struct signal_task signal_task_struct;
 
 static enum play_mode current_play_mode;
-static char *current_mop; /* mode or playlist specifier. NULL means dummy mooe */
+static char *current_mop; /* mode or playlist specifier. NULL means dummy mood */
 
 /**
  * A random number used to "authenticate" the connection.
@@ -113,7 +113,7 @@ extern uint32_t afs_socket_cookie;
  * area is written to the command socket.
  *
  * The afs process accepts connections on the command socket and reads the
- * shared memory id, attaches the corresponing area, calls the given handler to
+ * shared memory id, attaches the corresponding area, calls the given handler to
  * perform the desired action and to optionally compute a result.
  *
  * The result and a \p callback_result structure is then written to another
@@ -133,7 +133,7 @@ struct callback_query {
 /**
  * Structure embedded in the result of a callback.
  *
- * If the callback produced a result, an instance of that structure is embeeded
+ * If the callback produced a result, an instance of that structure is embedded
  * into the shared memory area holding the result, mainly to let the command
  * handler know the size of the result.
  *
@@ -604,6 +604,7 @@ int afs_cb_result_handler(struct osl_object *result, uint8_t band,
 {
        struct command_context *cc = private;
 
+       assert(cc);
        if (!result->size)
                return 1;
        if (cc->use_sideband)
@@ -722,9 +723,9 @@ static void signal_pre_select(struct sched *s, struct task *t)
        para_fd_set(st->fd, &s->rfds, &s->max_fileno);
 }
 
-static void afs_signal_post_select(struct sched *s, struct task *t)
+static int afs_signal_post_select(struct sched *s, __a_unused struct task *t)
 {
-       int signum;
+       int signum, ret;
 
        if (getppid() == 1) {
                PARA_EMERG_LOG("para_server died\n");
@@ -732,20 +733,20 @@ static void afs_signal_post_select(struct sched *s, struct task *t)
        }
        signum = para_next_signal(&s->rfds);
        if (signum == 0)
-               return;
+               return 0;
        if (signum == SIGHUP) {
                close_afs_tables();
                parse_config_or_die(1);
-               t->error = open_afs_tables();
-               if (t->error < 0)
-                       return;
+               ret = open_afs_tables();
+               if (ret < 0)
+                       return ret;
                init_admissible_files(current_mop);
-               return;
+               return 0;
        }
        PARA_EMERG_LOG("terminating on signal %d\n", signum);
 shutdown:
        task_notify_all(s, E_AFS_SIGNAL);
-       t->error = -E_AFS_SIGNAL;
+       return -E_AFS_SIGNAL;
 }
 
 static void register_signal_task(struct sched *s)
@@ -760,7 +761,7 @@ static void register_signal_task(struct sched *s)
        para_install_sighandler(SIGHUP);
 
        st->task.pre_select = signal_pre_select;
-       st->task.post_select = afs_signal_post_select;
+       st->task.new_post_select = afs_signal_post_select;
        sprintf(st->task.status, "signal task");
        register_task(s, &st->task);
 }
@@ -914,7 +915,7 @@ err:
 /** Shutdown connection if query has not arrived until this many seconds. */
 #define AFS_CLIENT_TIMEOUT 3
 
-static void command_post_select(struct sched *s, struct task *t)
+static int command_post_select(struct sched *s, struct task *t)
 {
        struct command_task *ct = container_of(t, struct command_task, task);
        struct sockaddr_un unix_addr;
@@ -922,16 +923,13 @@ static void command_post_select(struct sched *s, struct task *t)
        int fd, ret;
 
        ret = task_get_notification(t);
-       if (ret < 0) {
-               t->error = ret;
-               return;
-       }
+       if (ret < 0)
+               return ret;
        ret = execute_server_command(&s->rfds);
        if (ret < 0) {
                PARA_EMERG_LOG("%s\n", para_strerror(-ret));
                task_notify_all(s, -ret);
-               t->error = ret;
-               return;
+               return ret;
        }
        /* Check the list of connected clients. */
        list_for_each_entry_safe(client, tmp, &afs_client_list, node) {
@@ -952,17 +950,18 @@ static void command_post_select(struct sched *s, struct task *t)
        if (ret < 0)
                PARA_NOTICE_LOG("%s\n", para_strerror(-ret));
        if (ret <= 0)
-               return;
+               return 0;
        ret = mark_fd_nonblocking(fd);
        if (ret < 0) {
                PARA_NOTICE_LOG("%s\n", para_strerror(-ret));
                close(fd);
-               return;
+               return 0;
        }
        client = para_malloc(sizeof(*client));
        client->fd = fd;
        client->connect_time = *now;
        para_list_add(&client->node, &afs_client_list);
+       return 0;
 }
 
 static void register_command_task(uint32_t cookie, struct sched *s)
@@ -972,7 +971,7 @@ static void register_command_task(uint32_t cookie, struct sched *s)
        ct->cookie = cookie;
 
        ct->task.pre_select = command_pre_select;
-       ct->task.post_select = command_post_select;
+       ct->task.new_post_select = command_post_select;
        sprintf(ct->task.status, "afs command task");
        register_task(s, &ct->task);
 }