mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
find_free_chan_in_stack usage fix
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@46963 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -183,7 +183,9 @@ struct misdn_lib {
|
|||||||
void misdn_tx_jitter(struct misdn_bchannel *bc, int len);
|
void misdn_tx_jitter(struct misdn_bchannel *bc, int len);
|
||||||
|
|
||||||
struct misdn_bchannel *find_bc_by_l3id(struct misdn_stack *stack, unsigned long l3id);
|
struct misdn_bchannel *find_bc_by_l3id(struct misdn_stack *stack, unsigned long l3id);
|
||||||
|
|
||||||
struct misdn_bchannel *find_bc_by_confid(unsigned long confid);
|
struct misdn_bchannel *find_bc_by_confid(unsigned long confid);
|
||||||
|
|
||||||
struct misdn_bchannel *stack_holder_find_bychan(struct misdn_stack *stack, int chan);
|
struct misdn_bchannel *stack_holder_find_bychan(struct misdn_stack *stack, int chan);
|
||||||
|
|
||||||
int setup_bc(struct misdn_bchannel *bc);
|
int setup_bc(struct misdn_bchannel *bc);
|
||||||
@@ -824,14 +826,13 @@ static int create_process (int midev, struct misdn_bchannel *bc) {
|
|||||||
int l3_id;
|
int l3_id;
|
||||||
int i;
|
int i;
|
||||||
struct misdn_stack *stack=get_stack_by_bc(bc);
|
struct misdn_stack *stack=get_stack_by_bc(bc);
|
||||||
int free_chan;
|
|
||||||
|
|
||||||
if (stack->nt) {
|
if (stack->nt) {
|
||||||
free_chan = find_free_chan_in_stack(stack, bc, bc->channel_preselected?bc->channel:0);
|
if (!find_free_chan_in_stack(stack, bc, bc->channel_preselected ? bc->channel : 0))
|
||||||
if (!free_chan) return -1;
|
return -1;
|
||||||
/*bc->channel=free_chan;*/
|
/*bc->channel=free_chan;*/
|
||||||
|
|
||||||
cb_log(4,stack->port, " --> found channel: %d\n",free_chan);
|
cb_log(4,stack->port, " --> found channel: %d\n", bc->channel);
|
||||||
|
|
||||||
for (i=0; i <= MAXPROCS; i++)
|
for (i=0; i <= MAXPROCS; i++)
|
||||||
if (stack->procids[i]==0) break;
|
if (stack->procids[i]==0) break;
|
||||||
@@ -857,10 +858,10 @@ static int create_process (int midev, struct misdn_bchannel *bc) {
|
|||||||
} else {
|
} else {
|
||||||
if (stack->ptp || bc->te_choose_channel) {
|
if (stack->ptp || bc->te_choose_channel) {
|
||||||
/* we know exactly which channels are in use */
|
/* we know exactly which channels are in use */
|
||||||
free_chan = find_free_chan_in_stack(stack, bc, bc->channel_preselected?bc->channel:0);
|
if (!find_free_chan_in_stack(stack, bc, bc->channel_preselected ? bc->channel : 0))
|
||||||
if (!free_chan) return -1;
|
return -1;
|
||||||
/*bc->channel=free_chan;*/
|
/*bc->channel=free_chan;*/
|
||||||
cb_log(2,stack->port, " --> found channel: %d\n",free_chan);
|
cb_log(2,stack->port, " --> found channel: %d\n", bc->channel);
|
||||||
} else {
|
} else {
|
||||||
/* other phones could have made a call also on this port (ptmp) */
|
/* other phones could have made a call also on this port (ptmp) */
|
||||||
bc->channel=0xff;
|
bc->channel=0xff;
|
||||||
@@ -1496,8 +1497,7 @@ static int handle_event ( struct misdn_bchannel *bc, enum event_e event, iframe_
|
|||||||
|
|
||||||
{
|
{
|
||||||
if (bc->channel == 0xff) {
|
if (bc->channel == 0xff) {
|
||||||
bc->channel=find_free_chan_in_stack(stack, bc, 0);
|
if (!find_free_chan_in_stack(stack, bc, 0)) {
|
||||||
if (!bc->channel) {
|
|
||||||
cb_log(0, stack->port, "Any Channel Requested, but we have no more!!\n");
|
cb_log(0, stack->port, "Any Channel Requested, but we have no more!!\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1799,9 +1799,7 @@ handle_event_nt(void *dat, void *arg)
|
|||||||
bc->l3_id=hh->dinfo;
|
bc->l3_id=hh->dinfo;
|
||||||
|
|
||||||
if (bc->channel<=0) {
|
if (bc->channel<=0) {
|
||||||
bc->channel=find_free_chan_in_stack(stack,0,0);
|
if (!find_free_chan_in_stack(stack, bc, 0))
|
||||||
|
|
||||||
if (bc->channel<=0)
|
|
||||||
goto ERR_NO_CHANNEL;
|
goto ERR_NO_CHANNEL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2040,8 +2038,7 @@ handle_event_nt(void *dat, void *arg)
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
bc->channel = find_free_chan_in_stack(stack, bc, 0);
|
if (!find_free_chan_in_stack(stack, bc, 0)) {
|
||||||
if (!bc->channel) {
|
|
||||||
cb_log(0, stack->port, " No free channel at the moment\n");
|
cb_log(0, stack->port, " No free channel at the moment\n");
|
||||||
|
|
||||||
msg_t *dmsg;
|
msg_t *dmsg;
|
||||||
@@ -3230,8 +3227,7 @@ int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event )
|
|||||||
|
|
||||||
if (stack->nt) {
|
if (stack->nt) {
|
||||||
if (bc->channel <=0 ) { /* else we have the channel already */
|
if (bc->channel <=0 ) { /* else we have the channel already */
|
||||||
bc->channel = find_free_chan_in_stack(stack, bc, 0);
|
if (!find_free_chan_in_stack(stack, bc, 0)) {
|
||||||
if (!bc->channel) {
|
|
||||||
cb_log(0, stack->port, " No free channel at the moment\n");
|
cb_log(0, stack->port, " No free channel at the moment\n");
|
||||||
|
|
||||||
err=-ENOCHAN;
|
err=-ENOCHAN;
|
||||||
|
Reference in New Issue
Block a user