mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
Use the lock (which already existed, it just wasn't used) on the updaters list to protect the contents instead of the overall module list lock.
(closes issue #12080) Reported by: ChaseVenters git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@104596 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -905,10 +905,10 @@ void ast_update_use_count(void)
|
||||
resource has changed */
|
||||
struct loadupdate *m;
|
||||
|
||||
AST_LIST_LOCK(&module_list);
|
||||
AST_LIST_LOCK(&updaters);
|
||||
AST_LIST_TRAVERSE(&updaters, m, entry)
|
||||
m->updater();
|
||||
AST_LIST_UNLOCK(&module_list);
|
||||
AST_LIST_UNLOCK(&updaters);
|
||||
}
|
||||
|
||||
int ast_update_module_list(int (*modentry)(const char *module, const char *description, int usecnt, const char *like),
|
||||
@@ -939,9 +939,9 @@ int ast_loader_register(int (*v)(void))
|
||||
return -1;
|
||||
|
||||
tmp->updater = v;
|
||||
AST_LIST_LOCK(&module_list);
|
||||
AST_LIST_LOCK(&updaters);
|
||||
AST_LIST_INSERT_HEAD(&updaters, tmp, entry);
|
||||
AST_LIST_UNLOCK(&module_list);
|
||||
AST_LIST_UNLOCK(&updaters);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -950,7 +950,7 @@ int ast_loader_unregister(int (*v)(void))
|
||||
{
|
||||
struct loadupdate *cur;
|
||||
|
||||
AST_LIST_LOCK(&module_list);
|
||||
AST_LIST_LOCK(&updaters);
|
||||
AST_LIST_TRAVERSE_SAFE_BEGIN(&updaters, cur, entry) {
|
||||
if (cur->updater == v) {
|
||||
AST_LIST_REMOVE_CURRENT(&updaters, entry);
|
||||
@@ -958,7 +958,7 @@ int ast_loader_unregister(int (*v)(void))
|
||||
}
|
||||
}
|
||||
AST_LIST_TRAVERSE_SAFE_END;
|
||||
AST_LIST_UNLOCK(&module_list);
|
||||
AST_LIST_UNLOCK(&updaters);
|
||||
|
||||
return cur ? 0 : -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user