mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-18 18:58:22 +00:00
Fix graceful shutdown crash.
The cleanup code for optional_api needs to happen after all of the optional API users and providers have unused/unprovided. Unfortunately, regsitering the atexit() handler at the beginning of main() isn't soon enough, since module destructors run after that. ........ Merged revisions 398149 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@398150 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -158,18 +158,8 @@ struct {
|
||||
size_t len;
|
||||
} apis;
|
||||
|
||||
void optional_api_cleanup(void)
|
||||
{
|
||||
while (apis.len--) {
|
||||
optional_api_destroy(apis.list[apis.len]);
|
||||
}
|
||||
free(apis.list);
|
||||
apis.list = NULL;
|
||||
apis.maxlen = 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Gets (or creates) the \ref optional_api for the give function.
|
||||
* \brief Gets (or creates) the \ref optional_api for the given function.
|
||||
*
|
||||
* \param sysname Name of the function to look up.
|
||||
* \return Corresponding \ref optional_api.
|
||||
@@ -181,9 +171,11 @@ static struct optional_api *get_api(const char *symname)
|
||||
size_t i;
|
||||
|
||||
/* Find one, if we already have it */
|
||||
for (i = 0; i < apis.len; ++i) {
|
||||
if (strcmp(symname, apis.list[i]->symname) == 0) {
|
||||
return apis.list[i];
|
||||
if (apis.list) {
|
||||
for (i = 0; i < apis.len; ++i) {
|
||||
if (strcmp(symname, apis.list[i]->symname) == 0) {
|
||||
return apis.list[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user