[Asterisk-Dev] Unlocking the unlocked...

Guillermo Winkler gwinkler at inconcertcc.com
Tue Jun 28 15:12:50 MST 2005

    Under the following scenario:

6000 outgoing calls/hour(SIP-->ZAP)
75% connected (25% is busy or no answer)
100% of connected calls beign recorded, when LINK event occurs.
P4 2.8 HT.
Krnl 2.4.21

We are having some "Avoid deadlock" issues(This is not happening without 

As you can see in channel_walk_locked

if (retries < 10)
     ast_log(LOG_DEBUG, "Avoiding initial deadlock for '%s'\n", l->name);
     ast_log(LOG_WARNING, "Avoided initial deadlock for '%s', %d 
retries!\n", l->name, retries);

Ten 1ms retries are done to avoid deadlocks. But when recording is enabled, 
the channel gets locked on start:
 if (ast_monitor_start(c, format, fname, 1)) {
  if (ast_monitor_change_fname(c, fname, 1)) {

Those ten retries are not enough in that case, using lock instead of 
try_lock, or increasing the number of retries, solves the problem 

I wanted to know if someone else is experimenting something similar?

I think ast_channel_walk_locked and ast_get_channel_by_name_locked could be 
rewritten or a new set of functions be added , faster and more reliable (now 
you don't know if the channel you're looking for is not there at all or a 
deadlock(not so dead) issue on ANOTHER channel was the failure).

If you feel the same I would be glad to help.


More information about the asterisk-dev mailing list