summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--channels/sig_pri.c9
-rw-r--r--main/channel.c2
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;