diff options
Diffstat (limited to 'channels/misdn/isdn_lib.c')
-rw-r--r-- | channels/misdn/isdn_lib.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c index 70f5c9a9b..38a1f4ad4 100644 --- a/channels/misdn/isdn_lib.c +++ b/channels/misdn/isdn_lib.c @@ -1122,9 +1122,6 @@ int init_bc(struct misdn_stack *stack, struct misdn_bchannel *bc, int midev, in } - - - { stack_info_t *stinf; ret = mISDN_get_stack_info(midev, stack->port, buff, sizeof(buff)); @@ -3189,13 +3186,15 @@ void misdn_lib_log_ies(struct misdn_bchannel *bc) void misdn_send_lock(struct misdn_bchannel *bc) { //cb_log(0,bc->port,"Locking bc->pid:%d\n", bc->pid); - pthread_mutex_lock(&bc->send_lock->lock); + if (bc->send_lock) + pthread_mutex_lock(&bc->send_lock->lock); } void misdn_send_unlock(struct misdn_bchannel *bc) { //cb_log(0,bc->port,"UnLocking bc->pid:%d\n", bc->pid); - pthread_mutex_unlock(&bc->send_lock->lock); + if (bc->send_lock) + pthread_mutex_unlock(&bc->send_lock->lock); } int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event ) @@ -3634,7 +3633,7 @@ int misdn_lib_pid_restart(int pid) } /*Sends Restart message for every bchnanel*/ -int misdn_lib_send_restart(int port) +int misdn_lib_send_restart(int port, int channel) { struct misdn_stack *stack=find_stack_by_port(port); cb_log(0, port, "Sending Restarts on this port.\n"); @@ -3645,9 +3644,17 @@ int misdn_lib_send_restart(int port) dummybc.l3_id=MISDN_ID_GLOBAL; dummybc.nt=stack->nt; + /*default is all channels*/ int max=stack->pri?30:2; - int i; - for (i=1;i<=max;i++) { + int i=1; + + /*if a channel is specified we restart only this one*/ + if (channel > 0) { + i=channel; + max=channel; + } + + for (;i<=max;i++) { dummybc.channel=i; cb_log(0, port, "Restarting channel %d\n",i); misdn_lib_send_event(&dummybc, EVENT_RESTART); |