[asterisk-dev] [Code Review]: Make ast_unload_resource actually remove the module from the module list when it is unloaded

Terry Wilson reviewboard at asterisk.org
Wed Feb 22 15:03:46 CST 2012



> On Feb. 22, 2012, 1:11 p.m., wdoekes wrote:
> > /trunk/res/res_calendar.c, lines 1811-1814
> > <https://reviewboard.asterisk.org/r/1752/diff/2/?file=24509#file24509line1811>
> >
> >     If it's now not possible to unload res_calendar before unloading those that depend on it, shouldn't this be replaced with an assert(AST_LIST_EMPTY(&techs)) ?
> 
> Terry Wilson wrote:
>     Bah. Indeed. The whole point originally was to be able to unload res_calendar and the dependent modules with "module unload res_calendar.so". Oh, well. At least this makes it obvious why it isn't unloading in that case and still allows it to shut down properly.

Actually, you can still successfully unload all of the modules with "module unload -h res_calendar.so" so I'll just leave this in.


- Terry


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/1752/#review5588
-----------------------------------------------------------


On Feb. 22, 2012, 12:12 p.m., Terry Wilson wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/1752/
> -----------------------------------------------------------
> 
> (Updated Feb. 22, 2012, 12:12 p.m.)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Summary
> -------
> 
> res_calendar calls ast_unload_resource for the related tech modules when it is unloaded. If this happens through a 'core stop gracefully', then it will be unloading the tech modules that are already in the list that is being traversed (supposedly safely) for unloading, eventually causing a double free. The problem seems to be that ast_unload_resource, while it calls the unload() callback function for the module, does not actually unlink the module from the list of modules. So the AST_LIST_TRAVERSE_SAFE_BEGIN {} still iterates over the unloaded module.
> 
> This patch causes ast_unload_resource to call AST_LIST_REMOVE on successfully unloaded modules.
> 
> 
> Diffs
> -----
> 
>   /trunk/include/asterisk/calendar.h 356213 
>   /trunk/main/loader.c 356213 
>   /trunk/res/res_calendar.c 356213 
> 
> Diff: https://reviewboard.asterisk.org/r/1752/diff
> 
> 
> Testing
> -------
> 
> Scenario: Start Asterisk with res_calendar and assorted calendar tech modules loaded. Run 'core stop gracefully'.
> Before patch: Crash.
> After patch: No crash.
> 
> 
> Thanks,
> 
> Terry
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20120222/4b5ab4ed/attachment.htm>


More information about the asterisk-dev mailing list