[asterisk-dev] tilghman: branch 1.4 r187428 - in /branches/1.4: include/asterisk/ main/
Olle E. Johansson
oej at edvina.net
Thu Apr 9 14:59:59 CDT 2009
9 apr 2009 kl. 20.16 skrev Russell Bryant:
> SVN commits to the Digium repositories wrote:
>> Author: tilghman
>> Date: Thu Apr 9 13:08:20 2009
>> New Revision: 187428
>>
>> URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=187428
>> Log:
>> Race condition between ast_cli_command() and 'module unload' could
>> cause a deadlock.
>> Add lock timeouts to avoid this potential deadlock.
>> (closes issue #14705)
>> Reported by: jamessan
>> Patches:
>> 20090320__bug14705.diff.txt uploaded by tilghman (license 14)
>> Tested by: jamessan
>>
>> Modified:
>> branches/1.4/include/asterisk/lock.h
>> branches/1.4/main/manager.c
>
>
>> Modified: branches/1.4/main/manager.c
>> URL: http://svn.digium.com/svn-view/asterisk/branches/1.4/main/manager.c?view=diff&rev=187428&r1=187427&r2=187428
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- branches/1.4/main/manager.c (original)
>> +++ branches/1.4/main/manager.c Thu Apr 9 13:08:20 2009
>> @@ -2608,8 +2608,12 @@
>> int ast_manager_unregister(char *action)
>> {
>> struct manager_action *cur, *prev;
>> -
>> - ast_rwlock_wrlock(&actionlock);
>> + struct timespec tv = { 5, };
>> +
>> + if (ast_rwlock_timedwrlock(&actionlock, &tv)) {
>> + ast_log(LOG_ERROR, "Could not obtain lock on manager list\n");
>> + return -1;
>> + }
>> cur = prev = first_action;
>> while (cur) {
>> if (!strcasecmp(action, cur->action)) {
>
> I'm actually more in favor of the originally proposed patch by
> jamesson
> on issue 14705.
>
> As it stands, we now have two things in the code dealing with this
> potential deadlock. We have the CLI command blacklist, which jamesson
> simply proposed adding "module reload" to, and now we have this timed
> lock stuff.
>
> This timed lock handling will result in less deterministic
> behavior. In
> some cases, module CLI commands will work from the AMI, and in other
> cases they won't. I would much rather just make it clear that it is
> not
> supported at all by sticking with the blacklist approach.
>
Without looking into any of the two solutions, I just wanted to make
sure that you are aware that in manager 1.1 we have a module management
manager action.
/O
More information about the asterisk-dev
mailing list