- avoid deadlock in queue hangup

This commit is contained in:
MelwareDE 2006-06-09 05:15:32 +00:00
parent 939cf7615b
commit 465651bf11
1 changed files with 6 additions and 3 deletions

View File

@ -36,7 +36,7 @@
#ifdef PBX_IS_OPBX #ifdef PBX_IS_OPBX
#include "openpbx.h" #include "openpbx.h"
OPENPBX_FILE_VERSION("$HeadURL$", "$Revision$") OPENPBX_FILE_VERSION("$HeadURL$", "$Revision: 1.21 $")
#include "openpbx/lock.h" #include "openpbx/lock.h"
#include "openpbx/frame.h" #include "openpbx/frame.h"
@ -94,7 +94,7 @@ OPENPBX_FILE_VERSION("$HeadURL$", "$Revision$")
#define CC_VERSION "cm-opbx-0.7" #define CC_VERSION "cm-opbx-0.7"
#else #else
/* #define CC_VERSION "cm-x.y.z" */ /* #define CC_VERSION "cm-x.y.z" */
#define CC_VERSION "$Revision$" #define CC_VERSION "$Revision: 1.21 $"
#endif #endif
/* /*
@ -743,7 +743,10 @@ static int local_queue_frame(struct capi_pvt *i, struct ast_frame *f)
if ((f->frametype == AST_FRAME_CONTROL) && if ((f->frametype == AST_FRAME_CONTROL) &&
(f->subclass == AST_CONTROL_HANGUP)) { (f->subclass == AST_CONTROL_HANGUP)) {
i->isdnstate |= CAPI_ISDN_STATE_HANGUP; i->isdnstate |= CAPI_ISDN_STATE_HANGUP;
return (ast_queue_hangup(chan)); cc_mutex_unlock(&i->lock); /* give up lock to avoid deadlock */
res = ast_queue_hangup(chan);
cc_mutex_lock(&i->lock);
return res;
} }
if ((f->frametype == AST_FRAME_VOICE) && if ((f->frametype == AST_FRAME_VOICE) &&