X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=audiod.c;h=4aef61b0160979b29ab34d398da62eab62a6a52c;hb=f484411f1a48386975f55d1273750ca3c926aa9a;hp=7293285ef9687ee1c35fd46bfb735a73f6870ec0;hpb=2bad70d84e763b4d866d7b97dbc1cdc8e030bd45;p=paraslash.git diff --git a/audiod.c b/audiod.c index 7293285e..4aef61b0 100644 --- a/audiod.c +++ b/audiod.c @@ -393,7 +393,7 @@ static void parse_config_or_die(void) n = OPT_GIVEN(USER_ALLOW); if (n == 0) return; - uid_whitelist = para_malloc(n * sizeof(uid_t)); + uid_whitelist = alloc(n * sizeof(uid_t)); for (i = 0; i < n; i++) { const char *arg = lls_string_val(i, OPT_RESULT(USER_ALLOW)); int32_t val; @@ -480,6 +480,23 @@ static void close_writers(struct slot_info *s) s->wns = NULL; } +static void notify_writers(int error) +{ + int i; + + FOR_EACH_SLOT(i) { + struct slot_info *s = slot + i; + struct audio_format_info *a; + int j; + + if (s->format < 0) + continue; + a = afi + s->format; + for (j = 0; j < a->num_writers; j++) + task_notify(s->wns[j].task, error); + } +} + static void close_filters(struct slot_info *s) { int i; @@ -547,7 +564,7 @@ static void open_filters(struct slot_info *s) return; PARA_INFO_LOG("opening %s filters\n", audio_formats[s->format]); assert(s->fns == NULL); - s->fns = para_calloc(nf * sizeof(struct filter_node)); + s->fns = zalloc(nf * sizeof(struct filter_node)); parent = s->receiver_node->btrn; for (i = 0; i < nf; i++) { char buf[20]; @@ -585,7 +602,7 @@ static void open_writers(struct slot_info *s) struct btr_node *parent = s->fns[a->num_filters - 1].btrn; assert(s->wns == NULL); - s->wns = para_calloc(PARA_MAX(1U, a->num_writers) + s->wns = zalloc(PARA_MAX(1U, a->num_writers) * sizeof(struct writer_node)); for (i = 0; i < a->num_writers; i++) { wn = s->wns + i; @@ -612,7 +629,7 @@ static int open_receiver(int format) if (ret < 0) return ret; slot_num = ret; - rn = para_calloc(sizeof(*rn)); + rn = zalloc(sizeof(*rn)); rn->receiver = r; rn->lpr = a->receiver_lpr; rn->btrn = btr_new_node(&(struct btr_node_description) @@ -732,8 +749,8 @@ static void compute_time_diff(const struct timeval *status_time) if (count > 5) { int s = tv_diff(&diff, &stat_task->sa_time_diff, &tmp); if (tv_diff(&max_deviation, &tmp, NULL) < 0) - PARA_WARNING_LOG("time diff jump: %lums\n", - s * tv2ms(&tmp)); + PARA_WARNING_LOG("time diff jump: %c%lums\n", + s < 0? '-' : '+', tv2ms(&tmp)); } count++; sa_time_diff_sign = tv_convex_combination( @@ -802,7 +819,7 @@ static int parse_stream_command(const char *txt, const char **cmd) return -E_MISSING_COLON; *cmd = p + 1; len = p - txt; - re = para_malloc(len + 1); + re = alloc(len + 1); strncpy(re, txt, len); re[len] = '\0'; ret = get_matching_audio_format_nums(re); @@ -818,12 +835,9 @@ static int add_filter(int format, const char *cmdline) struct lls_parse_result *flpr; filter_num = filter_setup(cmdline, &cfg, &flpr); - a->filter_lpr = para_realloc(a->filter_lpr, - (nf + 1) * sizeof(flpr)); - a->filter_conf = para_realloc(a->filter_conf, - (nf + 1) * sizeof(void *)); - a->filter_nums = para_realloc(a->filter_nums, - (nf + 1) * sizeof(unsigned)); + a->filter_lpr = arr_realloc(a->filter_lpr, nf + 1, sizeof(flpr)); + a->filter_conf = arr_realloc(a->filter_conf, nf + 1, sizeof(void *)); + a->filter_nums = arr_realloc(a->filter_nums, nf + 1, sizeof(unsigned)); a->filter_nums[nf] = filter_num; a->filter_conf[nf] = cfg; @@ -869,8 +883,8 @@ static int parse_writer_args(void) if (a->num_writers > 0) continue; /* already set up */ a->num_writers = 1; - a->wids = para_malloc(sizeof(int)); - a->writer_lpr = para_malloc(sizeof(struct lls_parse_result *)); + a->wids = alloc(sizeof(int)); + a->writer_lpr = alloc(sizeof(struct lls_parse_result *)); a->wids[0] = check_writer_arg_or_die(NULL, a->writer_lpr); PARA_INFO_LOG("%s writer: %s (default)\n", audio_formats[i], writer_name(a->wids[0])); @@ -1051,7 +1065,7 @@ static int signal_post_select(struct sched *s, void *context) case SIGINT: case SIGTERM: case SIGHUP: - PARA_NOTICE_LOG("received signal %d\n", signum); + PARA_WARNING_LOG("terminating on signal %d\n", signum); task_notify_all(s, E_AUDIOD_SIGNAL); return -E_AUDIOD_SIGNAL; } @@ -1077,7 +1091,7 @@ static int command_post_select(struct sched *s, void *context) return ret; ret = handle_connect(ct->fd, &s->rfds); if (ret < 0) { - PARA_ERROR_LOG("%s\n", para_strerror(-ret)); + PARA_NOTICE_LOG("%s\n", para_strerror(-ret)); if (ret == -E_AUDIOD_TERM) { task_notify_all(s, -ret); return ret; @@ -1218,8 +1232,9 @@ static void start_stop_decoders(void) struct slot_info *sl; close_unused_slots(); - if (audiod_status != AUDIOD_ON || - !(stat_task->vss_status & VSS_STATUS_FLAG_PLAYING)) + if (audiod_status != AUDIOD_ON) + return notify_writers(E_NOT_PLAYING); + if (!(stat_task->vss_status & VSS_STATUS_FLAG_PLAYING)) return notify_receivers(E_NOT_PLAYING); if (!must_start_decoder()) return;