diff --git a/channels/chan_unistim.c b/channels/chan_unistim.c index 28d332f625..fbc6adda24 100644 --- a/channels/chan_unistim.c +++ b/channels/chan_unistim.c @@ -4792,7 +4792,7 @@ static int unistim_hangup(struct ast_channel *ast) struct unistim_line *l; struct unistim_device *d; struct unistimsession *s; - int i; + int i,end_call = 1; s = channel_to_session(ast); sub = ast_channel_tech_pvt(ast); @@ -4835,10 +4835,8 @@ static int unistim_hangup(struct ast_channel *ast) unistim_unalloc_sub(d, sub); return 0; } - if (sub->subtype == SUB_REAL) { sub_stop_silence(s, sub); - send_end_call(s); /* Send end call packet only if ending active call, in other way sound should be loosed */ } else if (sub->subtype == SUB_RING) { send_no_ring(s); for (i = 0; i < FAVNUM; i++) { @@ -4849,9 +4847,17 @@ static int unistim_hangup(struct ast_channel *ast) if (is_key_line(d, i) && !strcmp(l->name, d->sline[i]->name)) { send_favorite_short(i, FAV_LINE_ICON, s); d->ssub[i] = NULL; + continue; + } + if (d->ssub[i] != NULL) { /* Found other subchannel active other then hangup'ed one */ + ast_log(LOG_WARNING, "There is not only one call here %p %p %i\n",d->ssub[i], sub, i); + end_call = 0; } } } + if (end_call) { + send_end_call(s); /* Send end call packet only if ending active call, in other way sound should be loosed */ + } sub->moh = 0; if (sub->softkey >= 0) { send_favorite_short(sub->softkey, FAV_LINE_ICON, s); @@ -6141,7 +6147,7 @@ static int parse_bookmark(const char *text, struct unistim_device *d) return 0; } if (d->softkeyicon[p] != 0) { - ast_log(LOG_WARNING, "Invalid position %d for bookmark : already used\n:", p); + ast_log(LOG_WARNING, "Invalid position %d for bookmark : already used:\n", p); return 0; } memmove(line, line + 2, sizeof(line) - 2);