diff --git a/include/asterisk/bridge.h b/include/asterisk/bridge.h index dc8ebe5ec4..13fa19190d 100644 --- a/include/asterisk/bridge.h +++ b/include/asterisk/bridge.h @@ -594,6 +594,9 @@ enum ast_bridge_impart_flags { * it were placed into the bridge by ast_bridge_join(). * Channels placed into a bridge by ast_bridge_join() are * removed by a third party using ast_bridge_remove(). + * + * \note Any callbacks on the channel will be invoked on failure + * with the reason as AST_BRIDGE_AFTER_CB_REASON_IMPART_FAILED. */ int ast_bridge_impart(struct ast_bridge *bridge, struct ast_channel *chan, diff --git a/main/bridge.c b/main/bridge.c index f3c34d1fe3..9c53cfb5ac 100644 --- a/main/bridge.c +++ b/main/bridge.c @@ -1953,6 +1953,7 @@ int ast_bridge_impart(struct ast_bridge *bridge, res = bridge_impart_internal(bridge, chan, swap, features, flags, &cond); if (res) { /* Impart failed. Signal any other waiting impart threads */ + ast_bridge_discard_after_callback(chan, AST_BRIDGE_AFTER_CB_REASON_IMPART_FAILED); bridge_channel_impart_signal(chan); }