X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;ds=sidebyside;f=filter_common.c;h=add788a8f30465251ff111822b7131cd2e94054b;hb=refs%2Fheads%2Fpu;hp=5533d4dcd6d25fba87a242b2c09efa4b2c76e940;hpb=177ea8ea46918a925c0d2d8a07e7fbe9f478a40c;p=paraslash.git diff --git a/filter_common.c b/filter_common.c index 5533d4dc..bcc79f55 100644 --- a/filter_common.c +++ b/filter_common.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2005 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2005 Andre Noll , see file COPYING. */ /** \file filter_common.c Common helper functions for filter input/output. */ @@ -71,11 +67,11 @@ const char *filter_name(int filter_num) * filter, optionally followed by options for this filter. If yes, call the * command line parser of that filter and its ->setup method. * - * \return This function either succeeds or does not return. On success, the - * number of the filter is returned and conf is initialized to point to the - * filter configuration as returned by the filter's ->setup() method, if any. - * Moreover, *lprp is initialized to contain the parsed command line options. - * On errors, the function calls exit(EXIT_FAILURE). + * \return On success, the number of the filter is returned and conf is + * initialized to point to the filter configuration as returned by the filter's + * ->setup() method, if any. Moreover, *lprp is initialized to contain the + * parsed command line options. On errors a negative paraslash error code is + * returned. */ int filter_setup(const char *fa, void **conf, struct lls_parse_result **lprp) { @@ -84,9 +80,10 @@ int filter_setup(const char *fa, void **conf, struct lls_parse_result **lprp) const struct lls_command *cmd; const struct filter *f; + *lprp = NULL; ret = create_argv(fa, " \t\n", &argv); if (ret < 0) - goto fail; + return ret; argc = ret; ret = lls(lls_lookup_subcmd(argv[0], filter_cmd_suite, &errctx)); if (ret < 0) @@ -103,18 +100,17 @@ int filter_setup(const char *fa, void **conf, struct lls_parse_result **lprp) if (ret < 0) goto free_argv; f = filter_get(filter_num); + assert(f); *conf = f->setup? f->setup(*lprp) : NULL; ret = filter_num; free_argv: free_argv(argv); if (ret >= 0) return ret; -fail: if (errctx) PARA_ERROR_LOG("%s\n", errctx); free(errctx); - PARA_EMERG_LOG("%s\n", para_strerror(-ret)); - exit(EXIT_FAILURE); + return ret; } /** @@ -173,17 +169,16 @@ void print_filter_list(void) } /** - * Set select timeout of the scheduler. + * Request a minimal timeout if not idle. * - * \param s The scheduler. - * \param context Pointer to the filter node (task context). + * \param s The scheduler instance. + * \param context Pointer to the filter node. * - * This looks at the status of the btr node of the filter. If data is available - * in the input queue of the filter, or if an error occurred, a minimal timeout - * for the next select call is requested from the scheduler. Otherwise the - * scheduler timeout is left unchanged. + * If the buffer tree node of the given filter node has data available (or is + * in error state) a minimal I/O timeout is requested from the scheduler. + * Otherwise the function does nothing. */ -void generic_filter_pre_select(struct sched *s, void *context) +void generic_filter_pre_monitor(struct sched *s, void *context) { struct filter_node *fn = context;