X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=vss.c;h=a4dfa94ed5a20f136ed83b8c4d003afd3f187886;hb=ccbe76ece6a8d05439b2dbb51c1c777735c4171e;hp=9857d92dcd7e0e32721aaca15a86fc27fc061292;hpb=5d27648bfa9921f158e700151296af3e4c4fe13c;p=paraslash.git diff --git a/vss.c b/vss.c index 9857d92d..a4dfa94e 100644 --- a/vss.c +++ b/vss.c @@ -416,7 +416,8 @@ static int compute_group_size(struct vss_task *vsst, struct fec_group *g, g->bytes += len; g->num_chunks++; } - assert(g->num_chunks); + if (g->num_chunks == 0) + return -E_EOF; PARA_DEBUG_LOG("group #%u: %u chunks, %u bytes total\n", g->num, g->num_chunks, g->bytes); return 1; @@ -964,6 +965,11 @@ static void recv_afs_result(struct vss_task *vsst, fd_set *rfds) if (ret < 0) goto err; vsst->afsss = AFS_SOCKET_READY; + if (afs_code == NO_ADMISSIBLE_FILES) { + PARA_NOTICE_LOG("no admissible files\n"); + ret = 0; + goto err; + } ret = -E_NOFD; if (afs_code != NEXT_AUDIO_FILE) { PARA_ERROR_LOG("afs code: %u, expected: %d\n", afs_code, @@ -1000,9 +1006,11 @@ static void recv_afs_result(struct vss_task *vsst, fd_set *rfds) return; err: free(mmd->afd.afhi.chunk_table); + mmd->afd.afhi.chunk_table = NULL; if (passed_fd >= 0) close(passed_fd); - PARA_ERROR_LOG("%s\n", para_strerror(-ret)); + if (ret < 0) + PARA_ERROR_LOG("%s\n", para_strerror(-ret)); mmd->new_vss_status_flags = VSS_NEXT; } @@ -1132,7 +1140,7 @@ static int vss_post_select(struct sched *s, void *context) if (vsst->afsss != AFS_SOCKET_CHECK_FOR_WRITE) recv_afs_result(vsst, &s->rfds); else if (FD_ISSET(vsst->afs_socket, &s->wfds)) { - PARA_NOTICE_LOG("requesting new fd from afs\n"); + PARA_INFO_LOG("requesting new fd from afs\n"); ret = write_buffer(vsst->afs_socket, "new"); if (ret < 0) PARA_CRIT_LOG("%s\n", para_strerror(-ret)); @@ -1170,7 +1178,7 @@ void vss_init(int afs_socket, struct sched *s) vsst->afs_socket = afs_socket; ms2tv(announce_time, &vsst->announce_tv); PARA_INFO_LOG("announce timeval: %lums\n", tv2ms(&vsst->announce_tv)); - INIT_LIST_HEAD(&fec_client_list); + init_list_head(&fec_client_list); FOR_EACH_SENDER(i) { PARA_NOTICE_LOG("initializing %s sender\n", senders[i]->name); senders[i]->init(); @@ -1201,11 +1209,14 @@ void vss_init(int afs_socket, struct sched *s) void vss_shutdown(void) { int i; + bool is_command_handler = process_is_command_handler(); FOR_EACH_SENDER(i) { if (!senders[i]->shutdown) continue; - PARA_NOTICE_LOG("shutting down %s sender\n", senders[i]->name); + if (!is_command_handler) + PARA_NOTICE_LOG("shutting down %s sender\n", + senders[i]->name); senders[i]->shutdown(); } }