diff options
author | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-11-21 23:54:12 +0000 |
---|---|---|
committer | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-11-21 23:54:12 +0000 |
commit | b6e2980dd6796fabc2eba42b3db8d4b57513cb12 (patch) | |
tree | 0dc51f470ca68136426e22f709f308185e6121c2 /res | |
parent | 150b2c22ef3891af40e92cccbe05dbd3006e99a9 (diff) |
closes issue #11285, where an unload of a module that creates a dialplan context, causes a crash when you do a 'dialplan show' of that context. This is because the registrar string is defined in the module, and the stale pointer is traversed. The reporter offered a patch that would always strdup the registrar string, which is practical, but I preferred to destroy the created contexts in each module where one is created. That seemed more symmetric. There were only 6 place in asterisk where this is done: chan_sip, chan_iax2, chan_skinny, res_features, app_dial, and app_queue. The two apps destroyed the context, but left the contexts. All is fixed now and unloads should be dialplan friendly.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@89513 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res')
-rw-r--r-- | res/res_features.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/res/res_features.c b/res/res_features.c index 8bb8e5f38..31ce64b1a 100644 --- a/res/res_features.c +++ b/res/res_features.c @@ -3305,6 +3305,7 @@ static int load_module(void) static int unload_module(void) { + struct ast_context *con; ast_manager_unregister("ParkedCalls"); ast_manager_unregister("Bridge"); ast_manager_unregister("Park"); @@ -3312,6 +3313,12 @@ static int unload_module(void) ast_unregister_application(parkcall); ast_unregister_application(app_bridge); ast_devstate_prov_del("Park"); + con = ast_context_find(parking_con); + if (con) + ast_context_destroy(con, registrar); + con = ast_context_find(parking_con_dial); + if (con) + ast_context_destroy(con, registrar); return ast_unregister_application(parkedcall); } |