Move afh_init() call from vss.c to server.c.
[paraslash.git] / server.c
index d98e9603ced15a27ea1780ffb7ef850e5138c55e..3cc7e7892ad3d8ceade6f08dcc8ea1417c44e308 100644 (file)
--- a/server.c
+++ b/server.c
  *
  */
 
+#include <signal.h>
 #include <sys/types.h>
 #include <dirent.h>
 
 #include "para.h"
+#include "error.h"
 #include "server.cmdline.h"
 #include "afs_common.h"
 #include "afh.h"
+#include "string.h"
+#include "afs.h"
 #include "server.h"
 #include "vss.h"
 #include "config.h"
 #include "close_on_fork.h"
 #include "send.h"
-#include "error.h"
 #include "net.h"
 #include "daemon.h"
-#include "string.h"
 #include "ipc.h"
 #include "fd.h"
 #include "list.h"
 #include "sched.h"
 #include "signal.h"
 #include "user_list.h"
-#include "afs.h"
 
 /** define the array of error lists needed by para_server */
 INIT_SERVER_ERRLISTS;
@@ -351,8 +352,8 @@ out:
 }
 
 uint32_t afs_socket_cookie;
-static int afs_socket;
-pid_t afs_pid;
+int afs_socket;
+static pid_t afs_pid;
 
 static void init_afs(void)
 {
@@ -402,6 +403,7 @@ static unsigned do_inits(int argc, char **argv)
        init_selector();
 //     PARA_ERROR_LOG("num: %d\n", mmd->selector_num);
        PARA_NOTICE_LOG("%s", "initializing virtual streaming system\n");
+       afh_init();
        vss_init();
        mmd->server_pid = getpid();
        setup_signal_handling();
@@ -443,6 +445,8 @@ static void handle_sighup(void)
        mmd->selector_change = mmd->selector_num; /* do not change selector.. */
        change_selector(); /* .. just reload */
        init_user_list(user_list_file); /* reload user list */
+       if (afs_pid)
+               kill(afs_pid, SIGHUP);
 }
 
 static void status_refresh(void)
@@ -496,14 +500,14 @@ repeat:
        /* check socket and signal pipe in any case */
        para_fd_set(sockfd, &rfds, &max_fileno);
        para_fd_set(signal_pipe, &rfds, &max_fileno);
-       timeout = vss_preselect();
+       timeout = vss_preselect(&rfds, &wfds, &max_fileno);
        status_refresh();
        for (i = 0; senders[i].name; i++) {
                if (senders[i].status != SENDER_ON)
                        continue;
                if (!senders[i].pre_select)
                        continue;
-               senders[i].pre_select( &max_fileno, &rfds, &wfds);
+               senders[i].pre_select(&max_fileno, &rfds, &wfds);
        }
        if (selectors[mmd->selector_num].pre_select) {
                ret = selectors[mmd->selector_num].pre_select(&rfds, &wfds);
@@ -512,6 +516,7 @@ repeat:
        mmd_unlock();
        ret = para_select(max_fileno + 1, &rfds, &wfds, timeout);
        mmd_lock();
+       vss_post_select(&rfds, &wfds);
        if (mmd->selector_change >= 0)
                change_selector();
        if (selectors[mmd->selector_num].post_select)
@@ -537,8 +542,8 @@ repeat:
                        break;
                case SIGCHLD:
                        for (;;) {
-                               pid = para_reap_child();
-                               if (pid <= 0)
+                               ret = para_reap_child(&pid);
+                               if (ret <= 0)
                                        break;
                                if (pid != afs_pid)
                                        continue;