From: Andre Noll Date: Sat, 12 Apr 2008 07:24:58 +0000 (+0200) Subject: Call sender functions from vss.c rather than from server.c. X-Git-Tag: v0.3.3~94 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=9163a0f2c295ef0b16ed09c46dffaec75478bb6a Call sender functions from vss.c rather than from server.c. --- diff --git a/server.c b/server.c index ee1638d5..99482d9d 100644 --- 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 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(); } /**