Call sender functions from vss.c rather than from server.c.
authorAndre Noll <maan@systemlinux.org>
Sat, 12 Apr 2008 07:24:58 +0000 (09:24 +0200)
committerAndre Noll <maan@systemlinux.org>
Sat, 12 Apr 2008 07:24:58 +0000 (09:24 +0200)
server.c
vss.c

index ee1638d..99482d9 100644 (file)
--- a/server.c
+++ b/server.c
@@ -484,23 +484,12 @@ repeat:
        para_fd_set(signal_pipe, &rfds, &max_fileno);
        timeout = vss_preselect(&rfds, &wfds, &max_fileno);
        status_refresh();
-       for (i = 0; senders[i].name; i++) {
-               if (!senders[i].pre_select)
-                       continue;
-               senders[i].pre_select(&max_fileno, &rfds, &wfds);
-       }
        mmd_unlock();
        ret = para_select(max_fileno + 1, &rfds, &wfds, timeout);
        mmd_lock();
        if (ret < 0)
                goto repeat;
        vss_post_select(&rfds, &wfds);
-       for (i = 0; senders[i].name; i++) {
-               if (!senders[i].post_select)
-                       continue;
-               senders[i].post_select(&rfds, &wfds);
-       }
-       vss_send_chunk();
        status_refresh();
        if (FD_ISSET(signal_pipe, &rfds)) {
                int sig;
diff --git a/vss.c b/vss.c
index acac159..4024284 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -298,19 +298,15 @@ struct timeval *vss_preselect(fd_set *rfds, fd_set *wfds, int *max_fileno)
        if (!map || vss_next() || vss_paused() || vss_repos())
                for (i = 0; senders[i].name; i++)
                        senders[i].shutdown_clients();
-       if (vss_next()) {
+       if (vss_next())
                vss_eof();
-               goto out;
-       }
-       if (vss_paused()) {
+       else if (vss_paused()) {
                if (mmd->chunks_sent) {
                        gettimeofday(&now, NULL);
                        tv_add(&mmd->afd.afhi.eof_tv, &now, &eof_barrier);
                }
                mmd->chunks_sent = 0;
-               goto out;
-       }
-       if (vss_repos()) {
+       } else if (vss_repos()) {
                gettimeofday(&now, NULL);
                tv_add(&now, &announce_tv, &data_send_barrier);
                tv_add(&mmd->afd.afhi.eof_tv, &now, &eof_barrier);
@@ -318,13 +314,18 @@ struct timeval *vss_preselect(fd_set *rfds, fd_set *wfds, int *max_fileno)
                mmd->current_chunk = mmd->repos_request;
                mmd->new_vss_status_flags &= ~VSS_REPOS;
        }
-out:
+
        if (need_to_request_new_audio_file()) {
                PARA_DEBUG_LOG("ready and playing, but no audio file\n");
                para_fd_set(afs_socket, wfds, max_fileno);
                afsss = AFS_SOCKET_CHECK_FOR_WRITE;
        } else
                para_fd_set(afs_socket, rfds, max_fileno);
+       for (i = 0; senders[i].name; i++) {
+               if (!senders[i].pre_select)
+                       continue;
+               senders[i].pre_select(max_fileno, rfds, wfds);
+       }
        return vss_compute_timeout();
 }
 
@@ -416,18 +417,22 @@ err:
 
 void vss_post_select(fd_set *rfds, fd_set *wfds)
 {
-       int ret;
+       int ret, i;
 
        if (afsss != AFS_SOCKET_CHECK_FOR_WRITE) {
                if (FD_ISSET(afs_socket, rfds))
                        recv_afs_result();
-               return;
+       } else if (FD_ISSET(afs_socket, wfds)) {
+               PARA_NOTICE_LOG("requesting new fd from afs\n");
+               ret = send_buffer(afs_socket, "new");
+               afsss = AFS_SOCKET_AFD_PENDING;
        }
-       if (!FD_ISSET(afs_socket, wfds))
-               return;
-       PARA_NOTICE_LOG("requesting new fd from afs\n");
-       ret = send_buffer(afs_socket, "new");
-       afsss = AFS_SOCKET_AFD_PENDING;
+       for (i = 0; senders[i].name; i++) {
+               if (!senders[i].post_select)
+                       continue;
+               senders[i].post_select(rfds, wfds);
+       }
+       vss_send_chunk();
 }
 
 /**