X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=audiod.c;h=21020d4d5dbef1d55a1601e1fc550e2d9bf91536;hp=136557adca486f65bdb38c592254461284148459;hb=d54f2d11287702f99f8814961c69375c89d3dfdc;hpb=b0fe6d882dd35b01360a66e130d6714aff7b6a0d diff --git a/audiod.c b/audiod.c index 136557ad..21020d4d 100644 --- a/audiod.c +++ b/audiod.c @@ -92,6 +92,7 @@ struct status_task { struct timeval restart_barrier; /** Last time we received status data from para_server. */ struct timeval last_status_read; + size_t min_iqs; /** The offset value announced by para_server. */ int offset_seconds; /** The length of the current audio file as announced by para_server. */ @@ -632,6 +633,8 @@ static bool must_start_decoder(void) int cafn = stat_task->current_audio_format_num; unsigned vs = stat_task->vss_status; + if (audiod_status != AUDIOD_ON) + return false; if (cafn < 0) return false; if (!stat_task->ct) @@ -1025,6 +1028,7 @@ static void command_post_select(struct sched *s, struct task *t) ret = handle_connect(ct->fd); if (ret < 0) PARA_ERROR_LOG("%s\n", para_strerror(-ret)); + audiod_status_dump(); } static void init_command_task(struct command_task *ct) @@ -1187,25 +1191,28 @@ static void status_post_select(__a_unused struct sched *s, struct task *t) } if (st->ct->status != CL_RECEIVING) goto out; - ret = btr_node_status(st->btrn, 0, BTR_NT_LEAF); - if (ret <= 0) + ret = btr_node_status(st->btrn, st->min_iqs, BTR_NT_LEAF); + if (ret <= 0) { + struct timeval diff; + tv_diff(now, &st->last_status_read, &diff); + if (diff.tv_sec > 61) + kill_btrn(st->ct->btrn, &st->ct->task, + -E_STATUS_TIMEOUT); goto out; + } + btr_merge(st->btrn, st->min_iqs); sz = btr_next_buffer(st->btrn, &buf); ret = for_each_stat_item(buf, sz, update_item); if (ret < 0) { kill_btrn(st->ct->btrn, &st->ct->task, ret); goto out; } - if (sz != ret) + if (sz != ret) { + btr_consume(st->btrn, sz - ret); st->last_status_read = *now; - else { - struct timeval diff; - tv_diff(now, &st->last_status_read, &diff); - if (diff.tv_sec > 61) - kill_btrn(st->ct->btrn, &st->ct->task, - -E_STATUS_TIMEOUT); - } - btr_consume(st->btrn, sz - ret); + st->min_iqs = 0; + } else /* current status item crosses buffers */ + st->min_iqs = sz + 1; goto out; } if (tv_diff(now, &st->restart_barrier, NULL) < 0)