X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=vss.c;h=4024284a990614d193f05ad55ca126f85d612638;hb=9163a0f2c295ef0b16ed09c46dffaec75478bb6a;hp=acac159537171c95560e5582dfef538554f04f23;hpb=1d8ea0d046caf28d138fe510e2b3e2f20609071a;p=paraslash.git diff --git a/vss.c b/vss.c index acac1595..4024284a 100644 --- 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(); } /**