Newer
Older
return total_mod_loaded;
}
int ast_loader_register(int (*v)(void))
{
/* XXX Should be more flexible here, taking > 1 verboser XXX */
Russell Bryant
committed
struct loadupdate *tmp;
if (!(tmp = ast_malloc(sizeof(*tmp))))
return -1;
tmp->updater = v;
if (AST_LIST_LOCK(&module_list))
ast_log(LOG_WARNING, "Failed to lock\n");
AST_LIST_INSERT_HEAD(&updaters, tmp, next);
AST_LIST_UNLOCK(&module_list);
return 0;
}
int ast_loader_unregister(int (*v)(void))
{
struct loadupdate *cur;
if (AST_LIST_LOCK(&module_list))
AST_LIST_TRAVERSE_SAFE_BEGIN(&updaters, cur, next) {
if (cur->updater == v) {
AST_LIST_REMOVE_CURRENT(&updaters, next);
AST_LIST_TRAVERSE_SAFE_END;
AST_LIST_UNLOCK(&module_list);
return cur ? 0 : -1;