diff --git a/include/asterisk/bridge.h b/include/asterisk/bridge.h index 621ed0d248af92d0edac2efa496300f83480f6e6..1111d63893c0f92993b9cd54dde3ddd48ff18b11 100644 --- a/include/asterisk/bridge.h +++ b/include/asterisk/bridge.h @@ -645,6 +645,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 5752001381baadd1e24f8969dd7c148b394947ad..366d375d8929aa98d3bd19a5763d41c9b1e49d5d 100644 --- a/main/bridge.c +++ b/main/bridge.c @@ -1928,6 +1928,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); }