stat_task->stat_item_values[SI_STATUS_BAR] = make_message(
"%s:no connection to para_server\n",
status_item_list[SI_STATUS_BAR]);
- stat_client_write(stat_task->stat_item_values[SI_STATUS_BAR], SI_STATUS_BAR);
+ stat_client_write(stat_task->stat_item_values[SI_STATUS_BAR],
+ SI_STATUS_BAR);
+ if (stat_task->clock_diff_count) {
+ stat_task->clock_diff_barrier.tv_sec = now->tv_sec + 1;
+ stat_task->clock_diff_barrier.tv_usec = now->tv_usec;
+ }
}
void __noreturn clean_exit(int status, const char *msg)
count > 10? sign : sign * time_smooth, &diff,
&tmp);
stat_task->sa_time_diff = tmp;
- PARA_DEBUG_LOG("time diff (cur/avg): %s%lums/%s%lums\n",
+ PARA_INFO_LOG("time diff (cur/avg): %s%lums/%s%lums\n",
sign > 0? "+" : "-",
tv2ms(&diff),
sa_time_diff_sign ? "+" : "-",
PARA_WARNING_LOG("invalid status line: %s\n", line);
return;
}
+ if (stat_task->clock_diff_count && itemnum != SI_CURRENT_TIME)
+ return;
tmp = make_message("%s\n", line);
stat_client_write(tmp, itemnum);
free(tmp);
struct timeval tv = {sec, usec};
compute_time_diff(&tv);
}
+ if (stat_task->clock_diff_count)
+ stat_task->clock_diff_count--;
break;
}
}
static void status_pre_select(struct sched *s, struct task *t)
{
struct status_task *st = t->private_data;
- int argc = 2;
- char *argv[] = {"audiod", "stat", NULL};
+
t->ret = 1;
if (st->pcd && (audiod_status == AUDIOD_OFF || st->pcd->eof))
close_stat_pipe();
- if (!st->pcd && audiod_status != AUDIOD_OFF
- && tv_diff(now, &st->restart_barrier, NULL) > 0) {
- t->ret = client_parse_config(argc, argv, &st->pcd);
- if (t->ret < 0)
- return;
- t->ret = client_open(st->pcd);
- if (t->ret < 0)
+ if (st->pcd || audiod_status == AUDIOD_OFF)
+ return;
+ if (!st->clock_diff_count && tv_diff(now, &st->restart_barrier, NULL)
+ < 0)
+ return;
+ if (st->clock_diff_count) {
+ char *argv[] = {"audiod", "stat", "1", NULL};
+ int argc = 3;
+ if (tv_diff(now, &st->clock_diff_barrier, NULL) < 0)
return;
- st->pcd->task.event_handler = client_task_event_handler;
- s->timeout.tv_sec = 0;
- s->timeout.tv_usec = 1;
+ PARA_INFO_LOG("clock diff count: %d\n", st->clock_diff_count);
+ t->ret = client_parse_config(argc, argv, &st->pcd);
+
+ } else {
+ char *argv[] = {"audiod", "stat", NULL};
+ int argc = 2;
+ t->ret = client_parse_config(argc, argv, &st->pcd);
}
+
+ if (t->ret < 0)
+ return;
+ t->ret = client_open(st->pcd);
+ if (t->ret < 0)
+ return;
+ st->pcd->task.event_handler = client_task_event_handler;
+ s->timeout.tv_sec = 0;
+ s->timeout.tv_usec = 1;
}
static void status_post_select(__a_unused struct sched *s, struct task *t)
st->task.event_handler = status_event_handler;
st->task.private_data = st;
st->sa_time_diff_sign = 1;
+ st->clock_diff_count = conf.clock_diff_count_arg;
sprintf(st->task.status, "status task");
}