diff options
-rw-r--r-- | channels/sig_pri.c | 9 | ||||
-rw-r--r-- | main/channel.c | 2 |
2 files changed, 7 insertions, 4 deletions
diff --git a/channels/sig_pri.c b/channels/sig_pri.c index f0a15d7ed..093d8ad83 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -5121,7 +5121,6 @@ static int sig_pri_handle_hold(struct sig_pri_span *pri, pri_event *ev) int retval; int chanpos_old; int chanpos_new; - struct ast_channel *bridged; struct ast_channel *owner; chanpos_old = pri_find_principle_by_call(pri, ev->hold.call); @@ -5142,9 +5141,11 @@ static int sig_pri_handle_hold(struct sig_pri_span *pri, pri_event *ev) if (!owner) { goto done_with_private; } - bridged = ast_bridged_channel(owner); - if (!bridged) { - /* Cannot hold a call that is not bridged. */ + if (pri->pvts[chanpos_old]->call_level != SIG_PRI_CALL_LEVEL_CONNECT) { + /* + * Make things simple. Don't allow placing a call on hold that + * is not connected. + */ goto done_with_owner; } chanpos_new = pri_find_empty_nobch(pri); diff --git a/main/channel.c b/main/channel.c index 39edcd143..3812fa9c2 100644 --- a/main/channel.c +++ b/main/channel.c @@ -3413,6 +3413,8 @@ int ast_waitfordigit_full(struct ast_channel *c, int ms, int audiofd, int cmdfd) case AST_CONTROL_CONNECTED_LINE: case AST_CONTROL_REDIRECTING: case AST_CONTROL_UPDATE_RTP_PEER: + case AST_CONTROL_HOLD: + case AST_CONTROL_UNHOLD: case -1: /* Unimportant */ break; |