summaryrefslogtreecommitdiff
path: root/include/asterisk/channel.h
diff options
context:
space:
mode:
authorGeorge Joseph <gjoseph@digium.com>2016-11-14 13:03:46 -0700
committerGeorge Joseph <gjoseph@digium.com>2016-11-14 13:18:11 -0700
commit7263a17ca046923c245296a3cee21df0e4bd499a (patch)
treeab7df162292d7b972720849568ccfa7f3eb0ae20 /include/asterisk/channel.h
parent0dc456713358d943104bcde35b85e44673d401a3 (diff)
channel: Fix issues in hangup scenarios caused by frame deferral
ASTERISK-26343 Change-Id: I06dbf7366e26028251964143454a77d017bb61c8 (cherry picked from commit 0be46aaf6b8b9eb5b0160ec591cdc2c6e1802a6d)
Diffstat (limited to 'include/asterisk/channel.h')
-rw-r--r--include/asterisk/channel.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index e5f53f082..9150cbbbb 100644
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -972,6 +972,11 @@ enum {
* frames should be deferred.
*/
AST_FLAG_DEFER_FRAMES = (1 << 28),
+ /*!
+ * The channel is currently deferring hangup frames
+ * in addition to other frame types.
+ */
+ AST_FLAG_DEFER_HANGUP_FRAMES = (1 << 29),
};
/*! \brief ast_bridge_config flags */
@@ -4690,11 +4695,17 @@ struct ast_readq_list *ast_channel_deferred_readq(struct ast_channel *chan);
* drop important frames. This function can be called so that important frames
* will be deferred, rather than placed in the channel frame queue as normal.
*
+ * Hangups are an interesting frame type. Hangups will always be detectable by
+ * a reader when a channel is deferring frames. If the defer_hangups parameter
+ * is non-zero, then the hangup frame will also be duplicated and deferred, so
+ * that the next reader of the channel will get the hangup frame, too.
+ *
* \pre chan MUST be locked before calling
*
* \param chan The channel on which frames should be deferred
+ * \param defer_hangups Defer hangups in addition to other deferrable frames
*/
-void ast_channel_start_defer_frames(struct ast_channel *chan);
+void ast_channel_start_defer_frames(struct ast_channel *chan, int defer_hangups);
/*!
* \brief Stop deferring deferrable frames on this channel