From 06a8effb2397b38f1b050259e915aaa826e633f8 Mon Sep 17 00:00:00 2001 From: Christian Richter Date: Wed, 11 Jun 2008 11:52:18 +0000 Subject: Merged revisions 121751 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r121751 | crichter | 2008-06-11 11:28:04 +0200 (Mi, 11 Jun 2008) | 1 line fixed issue with previous commit, the find_free_channel test for channels which where inuse was broken. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@121770 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/misdn/isdn_lib.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'channels/misdn') diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c index a8d730e38..ed1d496b5 100644 --- a/channels/misdn/isdn_lib.c +++ b/channels/misdn/isdn_lib.c @@ -3121,12 +3121,18 @@ static int test_inuse(struct misdn_bchannel *bc) struct timeval now; gettimeofday(&now, NULL); if (!bc->in_use) { - if (bc->last_used.tv_sec < now.tv_sec) { - cb_log(0,bc->port, "channel with stid:%x for one second still in use!\n", bc->b_stid); + if ( bc->last_used.tv_sec == now.tv_sec ) { + cb_log(2,bc->port, "channel with stid:%x for one second still in use! (n:%d lu:%d)\n", bc->b_stid, now.tv_sec, bc->last_used.tv_sec); return 1; } + + + cb_log(3,bc->port, "channel with stid:%x not in use!\n", bc->b_stid); + return 0; } - return 0; + + cb_log(2,bc->port, "channel with stid:%x in use!\n", bc->b_stid); + return 1; } @@ -3175,9 +3181,15 @@ struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel, int inout, i if (channel > 0) { if (channel <= stack->b_num) { for (i = 0; i < stack->b_num; i++) { - if ( test_inuse(&stack->bc[i]) && stack->bc[i].channel == channel) { - cb_log(0,port,"Requested channel:%d on port:%d is already in use\n",channel, port); - return NULL; + if ( stack->bc[i].channel == channel) { + if (test_inuse(&stack->bc[i])) { + cb_log(0,port,"Requested channel:%d on port:%d is already in use\n",channel, port); + return NULL; + + } else { + prepare_bc(&stack->bc[i], channel); + return &stack->bc[i]; + } } } } else { @@ -3190,7 +3202,7 @@ struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel, int inout, i if (dec) { for (i = maxnum-1; i>=0; i--) { - if (test_inuse(&stack->bc[i])) { + if (!test_inuse(&stack->bc[i])) { /* 3. channel on bri means CW*/ if (!stack->pri && i==stack->b_num) stack->bc[i].cw=1; @@ -3202,7 +3214,7 @@ struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel, int inout, i } } else { for (i = 0; i bc[i])) { + if (!test_inuse(&stack->bc[i])) { /* 3. channel on bri means CW*/ if (!stack->pri && i==stack->b_num) stack->bc[i].cw=1; -- cgit v1.2.3