X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=audiod.c;h=0e8e5981085b7d05b8a2a08f35a9bb7944a4d72d;hb=b0a87fd7b5aeb8007afd3ac25d8548543d42080c;hp=4aef61b0160979b29ab34d398da62eab62a6a52c;hpb=f484411f1a48386975f55d1273750ca3c926aa9a;p=paraslash.git diff --git a/audiod.c b/audiod.c index 4aef61b0..0e8e5981 100644 --- a/audiod.c +++ b/audiod.c @@ -44,8 +44,6 @@ static struct lls_parse_result *lpr; #define OPT_GIVEN(_name) (lls_opt_given(OPT_RESULT(_name))) #define OPT_STRING_VAL(_name) (lls_string_val(0, OPT_RESULT(_name))) #define OPT_UINT32_VAL(_name) (lls_uint32_val(0, OPT_RESULT(_name))) -#define ENUM_STRING_VAL(_name) (lls_enum_string_val(OPT_UINT32_VAL(_name), \ - lls_opt(LSG_AUDIOD_PARA_AUDIOD_OPT_ ## _name, CMD_PTR))) __printf_2_3 void (*para_log)(int, const char*, ...) = daemon_log; /** define the array containing all supported audio formats */ @@ -123,7 +121,7 @@ enum vss_status_flags { * This is needed also in audiod_command.c (for the tasks command), so it can * not be made static. */ -struct sched sched = {.max_fileno = 0}; +struct sched sched = {.timeout = 0}; /* The task for obtaining para_server's status (para_client stat). */ struct status_task { @@ -389,11 +387,11 @@ static void parse_config_or_die(void) para_strerror(-ret)); exit(EXIT_FAILURE); } - daemon_set_loglevel(ENUM_STRING_VAL(LOGLEVEL)); + daemon_set_loglevel(OPT_UINT32_VAL(LOGLEVEL)); n = OPT_GIVEN(USER_ALLOW); if (n == 0) return; - uid_whitelist = alloc(n * sizeof(uid_t)); + uid_whitelist = arr_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; @@ -584,8 +582,8 @@ static void open_filters(struct slot_info *s) sprintf(buf, "%s (slot %d)", name, (int)(s - slot)); fn->task = task_register(&(struct task_info) { .name = buf, - .pre_select = f->pre_select, - .post_select = f->post_select, + .pre_monitor = f->pre_monitor, + .post_monitor = f->post_monitor, .context = fn, }, &sched); parent = fn->btrn; @@ -648,8 +646,8 @@ static int open_receiver(int format) audio_formats[format], name, slot_num); rn->task = task_register(&(struct task_info) { .name = name, - .pre_select = r->pre_select, - .post_select = r->post_select, + .pre_monitor = r->pre_monitor, + .post_monitor = r->post_monitor, .context = rn, }, &sched); return slot_num; @@ -1052,7 +1050,7 @@ static void init_local_socket(struct command_task *ct) exit(EXIT_FAILURE); } -static int signal_post_select(struct sched *s, void *context) +static int signal_post_monitor(struct sched *s, void *context) { struct signal_task *st = context; int ret, signum; @@ -1060,7 +1058,7 @@ static int signal_post_select(struct sched *s, void *context) ret = task_get_notification(st->task); if (ret < 0) return ret; - signum = para_next_signal(&s->rfds); + signum = para_next_signal(); switch (signum) { case SIGINT: case SIGTERM: @@ -1072,13 +1070,13 @@ static int signal_post_select(struct sched *s, void *context) return 0; } -static void command_pre_select(struct sched *s, void *context) +static void command_pre_monitor(struct sched *s, void *context) { struct command_task *ct = context; - para_fd_set(ct->fd, &s->rfds, &s->max_fileno); + sched_monitor_readfd(ct->fd, s); } -static int command_post_select(struct sched *s, void *context) +static int command_post_monitor(struct sched *s, void *context) { int ret; struct command_task *ct = context; @@ -1089,7 +1087,7 @@ static int command_post_select(struct sched *s, void *context) ret = task_get_notification(ct->task); if (ret < 0) return ret; - ret = handle_connect(ct->fd, &s->rfds); + ret = dispatch_local_connection(ct->fd); if (ret < 0) { PARA_NOTICE_LOG("%s\n", para_strerror(-ret)); if (ret == -E_AUDIOD_TERM) { @@ -1129,8 +1127,8 @@ static void init_command_task(struct command_task *ct) ct->task = task_register(&(struct task_info) { .name = "command", - .pre_select = command_pre_select, - .post_select = command_post_select, + .pre_monitor = command_pre_monitor, + .post_monitor = command_post_monitor, .context = ct, }, &sched); } @@ -1251,7 +1249,7 @@ static void start_stop_decoders(void) audiod_status_dump(true); } -static void status_pre_select(struct sched *s, void *context) +static void status_pre_monitor(struct sched *s, void *context) { struct status_task *st = context; int i, ret, cafn = stat_task->current_audio_format_num; @@ -1283,7 +1281,7 @@ min_delay: } /* restart the client task if necessary */ -static int status_post_select(struct sched *s, void *context) +static int status_post_monitor(struct sched *s, void *context) { struct status_task *st = context; int ret; @@ -1374,8 +1372,8 @@ static void init_status_task(struct status_task *st) stat_task->task = task_register(&(struct task_info) { .name = "stat", - .pre_select = status_pre_select, - .post_select = status_post_select, + .pre_monitor = status_pre_monitor, + .post_monitor = status_post_monitor, .context = stat_task, }, &sched); } @@ -1459,7 +1457,7 @@ int main(int argc, char *argv[]) ret = lls(lls_parse(argc, argv, CMD_PTR, &lpr, &errctx)); if (ret < 0) goto out; - daemon_set_loglevel(ENUM_STRING_VAL(LOGLEVEL)); + daemon_set_loglevel(OPT_UINT32_VAL(LOGLEVEL)); daemon_drop_privileges_or_die(OPT_STRING_VAL(USER), OPT_STRING_VAL(GROUP)); version_handle_flag("audiod", OPT_GIVEN(VERSION)); @@ -1502,13 +1500,12 @@ int main(int argc, char *argv[]) signal_task->task = task_register(&(struct task_info) { .name = "signal", - .pre_select = signal_pre_select, - .post_select = signal_post_select, + .pre_monitor = signal_pre_monitor, + .post_monitor = signal_post_monitor, .context = signal_task, }, &sched); - sched.default_timeout.tv_sec = 2; - sched.default_timeout.tv_usec = 999 * 1000; + sched.default_timeout = 2999; ret = schedule(&sched); audiod_cleanup(); sched_shutdown(&sched);