Merge "bridge: Hold off more than one imparting channel at a time."

This commit is contained in:
zuul
2016-04-22 17:08:04 -05:00
committed by Gerrit Code Review
3 changed files with 196 additions and 79 deletions

View File

@@ -151,47 +151,20 @@ int bridge_channel_internal_push_full(struct ast_bridge_channel *bridge_channel,
void bridge_channel_internal_pull(struct ast_bridge_channel *bridge_channel);
/*!
* \brief Internal bridge channel wait condition and associated result.
*/
struct bridge_channel_internal_cond {
/*! Lock for the data structure */
ast_mutex_t lock;
/*! Wait condition */
ast_cond_t cond;
/*! Wait until done */
int done;
/*! The bridge channel */
struct ast_bridge_channel *bridge_channel;
};
/*!
* \internal
* \brief Wait for the expected signal.
* \since 13.5.0
* \brief Signal imparting threads to wake up.
* \since 13.9.0
*
* \param cond the wait object
* \param chan Channel imparted that we need to signal.
*
* \return Nothing
*/
void bridge_channel_internal_wait(struct bridge_channel_internal_cond *cond);
/*!
* \internal
* \brief Signal the condition wait.
* \since 13.5.0
*
* \param cond the wait object
*
* \return Nothing
*/
void bridge_channel_internal_signal(struct bridge_channel_internal_cond *cond);
void bridge_channel_impart_signal(struct ast_channel *chan);
/*!
* \internal
* \brief Join the bridge_channel to the bridge (blocking)
*
* \param bridge_channel The Channel in the bridge
* \param cond data used for signaling
*
* \note The bridge_channel->swap holds a channel reference for the swap
* channel going into the bridging system. The ref ensures that the swap
@@ -206,8 +179,7 @@ void bridge_channel_internal_signal(struct bridge_channel_internal_cond *cond);
* \retval 0 bridge channel successfully joined the bridge
* \retval -1 bridge channel failed to join the bridge
*/
int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel,
struct bridge_channel_internal_cond *cond);
int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel);
/*!
* \internal