[asterisk-dev] Reload module
mjordan at digium.com
Thu May 24 08:21:53 CDT 2012
----- Original Message -----
> From: "Yaroslav Panych" <panych.y at gmail.com>
> To: "Asterisk Developers Mailing List" <asterisk-dev at lists.digium.com>
> Sent: Thursday, May 24, 2012 8:09:35 AM
> Subject: Re: [asterisk-dev] Reload module
> 2012/5/24 Matthew Jordan <mjordan at digium.com>:
> > ----- Original Message -----
> >> From: "Yaroslav Panych" <panych.y at gmail.com>
> > Yes - take a look at ast_module_reload. The CLI command 'module
> > reload'
> > uses this function to reload a specific Asterisk module.
> Yes, I know about ast_module_reload, But it hidden in
> asterisk/_private.h with warning: "normally not used by modules". So
> don't know if it is safe to use it inside modules. More precisely -
> inside AMI action handler? I want to avoid all possible deadlocks.
If you knew this method existed, why did you ask if "Is there any possibility
to load/unload/reload specific module from other C module?" Clearly there
was a mechanism to reload a specific module in Asterisk. Did you expect
there to be multiple mechanisms?
Its not surprising that there would be a warning associated with this
method - it is highly suspect that an external module would want or need
to reload another external module. There are a number of pitfalls you could
run into by encouraging the use of this function in external modules:
* Circular dependencies, wherein A reloads B, and during B's reload, it
attempts to reload A
* Unanticipated reloads, wherein B does not expect to be reloaded during
a particular operation or period of time and A reloads it anyway (this
is less of a concern, given that reloads can feasibly happen at anytime
* Poor dependency planning, wherein A expects B to exist and issues a reload
but B was never loaded
* Simultaneous reloads, wherein A issues a reload of module B and a CLI
command issues a reload of B at the same time
So yes, you really should not be doing what you're planning on doing - but
you didn't ask if we thought what you were doing was wise, merely whether
or not it was possible. And it is possible.
As far as avoiding deadlocks: that's up to your implementation. I will not
claim that you 'won't run into deadlocks' with this method. At the very
least, the method is executed in the context of a CLI handler thread, so
you can make some basic assumptions about the thread safety from that
knowledge. But its up to you to make sure you don't cause a deadlock in the
modules you reload.
> regards, Yaroslav
Digium, Inc. | Software Developer
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org
More information about the asterisk-dev