@ -103,6 +103,7 @@ int misdn_jb_empty(struct misdn_jb *jb, char *data, int len);
/* BEGIN: chan_misdn.h */
/* BEGIN: chan_misdn.h */
ast_mutex_t release_lock ;
enum misdn_chan_state {
enum misdn_chan_state {
@ -3286,10 +3287,13 @@ static void hangup_chan(struct chan_list *ch)
/** Isdn asks us to release channel, pendant to misdn_hangup **/
/** Isdn asks us to release channel, pendant to misdn_hangup **/
static void release_chan ( struct misdn_bchannel * bc ) {
static void release_chan ( struct misdn_bchannel * bc ) {
struct ast_channel * ast = NULL ;
struct ast_channel * ast = NULL ;
ast_mutex_lock ( & release_lock ) ;
{
{
struct chan_list * ch = find_chan_by_bc ( cl_te , bc ) ;
struct chan_list * ch = find_chan_by_bc ( cl_te , bc ) ;
if ( ! ch ) {
if ( ! ch ) {
chan_misdn_log ( 1 , bc - > port , " release_chan: Ch not found! \n " ) ;
chan_misdn_log ( 1 , bc - > port , " release_chan: Ch not found! \n " ) ;
ast_mutex_unlock ( & release_lock ) ;
return ;
return ;
}
}
@ -3341,6 +3345,8 @@ static void release_chan(struct misdn_bchannel *bc) {
/* chan is already cleaned, so exiting */
/* chan is already cleaned, so exiting */
}
}
}
}
ast_mutex_unlock ( & release_lock ) ;
}
}
/*** release end **/
/*** release end **/
@ -4537,6 +4543,7 @@ int load_module(void)
}
}
ast_mutex_init ( & cl_te_lock ) ;
ast_mutex_init ( & cl_te_lock ) ;
ast_mutex_init ( & release_lock ) ;
misdn_cfg_update_ptp ( ) ;
misdn_cfg_update_ptp ( ) ;
misdn_cfg_get_ports_string ( ports ) ;
misdn_cfg_get_ports_string ( ports ) ;