Simplify vss_presselect().
[paraslash.git] / vss.c
diff --git a/vss.c b/vss.c
index 1501052a87b8cc3c9eb1f86c834e6c2300e50f1d..acac159537171c95560e5582dfef538554f04f23 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -182,14 +182,8 @@ static struct timeval *vss_compute_timeout(void)
 static void vss_eof(void)
 {
        struct timeval now;
-       int i;
        char *tmp;
 
-       if (!map) {
-               for (i = 0; senders[i].name; i++)
-                       senders[i].shutdown_clients();
-               return;
-       }
        if (mmd->new_vss_status_flags & VSS_NOMORE)
                mmd->new_vss_status_flags = VSS_NEXT;
        gettimeofday(&now, NULL);
@@ -299,36 +293,31 @@ static int need_to_request_new_audio_file(void)
 struct timeval *vss_preselect(fd_set *rfds, fd_set *wfds, int *max_fileno)
 {
        int i;
-       struct timeval *tv;
+       struct timeval now;
 
-       if (!map)
+       if (!map || vss_next() || vss_paused() || vss_repos())
                for (i = 0; senders[i].name; i++)
                        senders[i].shutdown_clients();
-       else {
-               if (vss_next()) {
-                       vss_eof();
-                       tv = vss_compute_timeout();
-                       goto out;
-               }
+       if (vss_next()) {
+               vss_eof();
+               goto out;
        }
-       if (vss_paused() || vss_repos()) {
-               for (i = 0; senders[i].name; i++)
-                       senders[i].shutdown_clients();
-               if (map) {
-                       struct timeval now;
+       if (vss_paused()) {
+               if (mmd->chunks_sent) {
                        gettimeofday(&now, NULL);
-                       if (!vss_paused() || mmd->chunks_sent)
-                               tv_add(&mmd->afd.afhi.eof_tv, &now, &eof_barrier);
-                       if (vss_repos())
-                               tv_add(&now, &announce_tv, &data_send_barrier);
+                       tv_add(&mmd->afd.afhi.eof_tv, &now, &eof_barrier);
                }
                mmd->chunks_sent = 0;
+               goto out;
        }
        if (vss_repos()) {
-               mmd->new_vss_status_flags &= ~(VSS_REPOS);
+               gettimeofday(&now, NULL);
+               tv_add(&now, &announce_tv, &data_send_barrier);
+               tv_add(&mmd->afd.afhi.eof_tv, &now, &eof_barrier);
+               mmd->chunks_sent = 0;
                mmd->current_chunk = mmd->repos_request;
+               mmd->new_vss_status_flags &= ~VSS_REPOS;
        }
-       tv = vss_compute_timeout();
 out:
        if (need_to_request_new_audio_file()) {
                PARA_DEBUG_LOG("ready and playing, but no audio file\n");
@@ -336,7 +325,7 @@ out:
                afsss = AFS_SOCKET_CHECK_FOR_WRITE;
        } else
                para_fd_set(afs_socket, rfds, max_fileno);
-       return tv;
+       return vss_compute_timeout();
 }
 
 static int recv_afs_msg(int *fd, uint32_t *code, uint32_t *data)