if wn->open() failed, undo all work and set the eof flag in the wng.
*socket_name, *hostname;
static char *stat_item_values[NUM_STAT_ITEMS];
static FILE *logfile;
*socket_name, *hostname;
static char *stat_item_values[NUM_STAT_ITEMS];
static FILE *logfile;
-static const struct timeval restart_delay = {0, 300 * 1000};
+static const struct timeval restart_delay = {0, 200 * 1000};
static struct audio_format_info afi[NUM_AUDIO_FORMATS];
static struct timeval *now;
static struct audio_format_info afi[NUM_AUDIO_FORMATS];
static struct timeval *now;
s->wng->writer_nodes[i].writer = a->writers[i];
sprintf(s->wng->writer_nodes[i].task.status, "writer_node");
}
s->wng->writer_nodes[i].writer = a->writers[i];
sprintf(s->wng->writer_nodes[i].task.status, "writer_node");
}
- ret = wng_open(s->wng); /* FIXME */
+ ret = wng_open(s->wng);
+ if (ret < 0) {
+ PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
+ return;
+ }
s->wstime = *now;
current_decoder = slot_num;
activate_inactive_grab_clients(slot_num, s->format, &s->fc->filters);
s->wstime = *now;
current_decoder = slot_num;
activate_inactive_grab_clients(slot_num, s->format, &s->fc->filters);
count > 10? sign : sign * time_smooth, &diff,
&tmp);
sa_time_diff = tmp;
count > 10? sign : sign * time_smooth, &diff,
&tmp);
sa_time_diff = tmp;
- PARA_INFO_LOG("time diff (cur/avg): %s%lums/%s%lums\n",
+ PARA_DEBUG_LOG("time diff (cur/avg): %s%lums/%s%lums\n",
sign > 0? "+" : "-",
tv2ms(&diff),
sa_time_diff_sign ? "+" : "-",
sign > 0? "+" : "-",
tv2ms(&diff),
sa_time_diff_sign ? "+" : "-",
t->ret = -E_FC_EOF;
if (fc->output_eof && *fc->output_eof)
goto err_out;
t->ret = -E_FC_EOF;
if (fc->output_eof && *fc->output_eof)
goto err_out;
+ if (fc->input_eof && *fc->input_eof)
+ goto err_out;
again:
ib = fc->inbuf;
loaded = fc->in_loaded;
again:
ib = fc->inbuf;
loaded = fc->in_loaded;
wn->wng = g;
ret = wn->writer->open(wn);
if (ret < 0)
wn->wng = g;
ret = wn->writer->open(wn);
if (ret < 0)
wn->chunk_bytes = ret;
g->max_chunk_bytes = PARA_MAX(g->max_chunk_bytes, ret);
wn->task.pre_select = wn->writer->pre_select;
wn->chunk_bytes = ret;
g->max_chunk_bytes = PARA_MAX(g->max_chunk_bytes, ret);
wn->task.pre_select = wn->writer->pre_select;
register_task(&wn->task);
}
sprintf(g->task.status, "%s", "writer node group");
register_task(&wn->task);
}
sprintf(g->task.status, "%s", "writer node group");
+ g->eof = 0;
+ return 1;
+err_out:
+ while (i > 0) {
+ struct writer_node *wn = &g->writer_nodes[--i];
+ unregister_task(&wn->task);
+ wn->writer->close(wn);
+ }
+ g->num_writers = 0;
+ g->eof = 1;