* @{
*/
int module_submodule_parse(UNUSED TALLOC_CTX *ctx, void *out, void *parent,
- CONF_ITEM *ci, UNUSED CONF_PARSER const *rule);
+ CONF_ITEM *ci, UNUSED CONF_PARSER const *rule) CC_HINT(warn_unused_result);
/** @} */
/** @name Module and module thread lookup
*
* @{
*/
-module_instance_t *module_parent(module_instance_t const *child);
+module_instance_t *module_parent(module_instance_t const *child) CC_HINT(warn_unused_result);
-module_instance_t *module_root(module_instance_t const *child);
+module_instance_t *module_root(module_instance_t const *child); CC_HINT(warn_unused_result)
module_instance_t *module_by_name(module_list_t const *ml, module_instance_t const *parent, char const *asked_name)
- CC_HINT(nonnull(1,3));
+ CC_HINT(nonnull(1,3)) CC_HINT(warn_unused_result);
-module_instance_t *module_by_data(module_list_t const *ml, void const *data);
+module_instance_t *module_by_data(module_list_t const *ml, void const *data) CC_HINT(warn_unused_result);
-module_thread_instance_t *module_thread(module_instance_t *mi);
+module_thread_instance_t *module_thread(module_instance_t *mi) CC_HINT(warn_unused_result);
-module_thread_instance_t *module_thread_by_data(module_list_t const *ml, void const *data);
+module_thread_instance_t *module_thread_by_data(module_list_t const *ml, void const *data) CC_HINT(warn_unused_result);
/** @} */
/** @name Module and module thread initialisation and instantiation
void modules_thread_detach(module_list_t const *ml);
-int modules_thread_instantiate(TALLOC_CTX *ctx, module_list_t const *ml, fr_event_list_t *el) CC_HINT(nonnull);
+int modules_thread_instantiate(TALLOC_CTX *ctx, module_list_t const *ml, fr_event_list_t *el) CC_HINT(nonnull) CC_HINT(warn_unused_result);
-int module_instantiate(module_instance_t *mi) CC_HINT(nonnull);
+int module_instantiate(module_instance_t *mi) CC_HINT(nonnull) CC_HINT(warn_unused_result);
-int modules_instantiate(module_list_t const *ml) CC_HINT(nonnull);
+int modules_instantiate(module_list_t const *ml) CC_HINT(nonnull) CC_HINT(warn_unused_result);
-int module_bootstrap(module_instance_t *mi) CC_HINT(nonnull);
+int module_bootstrap(module_instance_t *mi) CC_HINT(nonnull) CC_HINT(warn_unused_result);
-int modules_bootstrap(module_list_t const *ml) CC_HINT(nonnull);
+int modules_bootstrap(module_list_t const *ml) CC_HINT(nonnull) CC_HINT(warn_unused_result);
-int module_conf_parse(module_instance_t *mi, CONF_SECTION *mod_cs) CC_HINT(nonnull);
+int module_conf_parse(module_instance_t *mi, CONF_SECTION *mod_cs) CC_HINT(nonnull) CC_HINT(warn_unused_result);
module_instance_t *module_alloc(module_list_t *ml,
module_instance_t const *parent,
dl_module_type_t type, char const *mod_name, char const *inst_name)
- CC_HINT(nonnull(1));
+ CC_HINT(nonnull(1)) CC_HINT(warn_unused_result);
-module_list_t *module_list_alloc(TALLOC_CTX *ctx, char const *name);
+module_list_t *module_list_alloc(TALLOC_CTX *ctx, char const *name) CC_HINT(warn_unused_result);
void modules_init(char const *lib_dir);
/** @} */
parent = tmp;
} while (true);
- module_instantiate(module_by_name(rlm_modules, NULL, inst_name));
+ if (unlikely(module_instantiate(module_by_name(rlm_modules, NULL, inst_name)) < 0)) return -1;
}
/*
ci = cf_item_next(modules, ci)) {
char const *name;
CONF_SECTION *subcs;
- module_instance_t *mi;
+ module_instance_t *mi = NULL;
/*
* @todo - maybe this should be a warning?
* Compile the default "actions" subsection, which includes retries.
*/
actions = cf_section_find(subcs, "actions", NULL);
- if (actions && unlang_compile_actions(&mi->actions, actions, (mi->module->type & MODULE_TYPE_RETRY) != 0)) {
- talloc_free(mi);
- goto error;
- }
+ if (actions && unlang_compile_actions(&mi->actions, actions, (mi->module->type & MODULE_TYPE_RETRY) != 0)) goto error;
}
/*
* This needs to be after parsing so that submodules can access
* their parent's fully parsed data.
*/
- modules_bootstrap(rlm_modules);
+ {
+ int ret = modules_bootstrap(rlm_modules);
- cf_log_debug(modules, " } # modules");
+ cf_log_debug(modules, " } # modules");
+
+ if (unlikely(ret < 0)) return -1;
+ }
if (fr_command_register_hook(NULL, NULL, modules, module_cmd_list_table) < 0) {
PERROR("Failed registering radmin commands for modules");