mirror of
https://github.com/asterisk/asterisk.git
synced 2026-07-27 16:07:15 -07:00
confbridge: Fix MOH on simultaneous user entry to a new conference.
When two users entered a new conference simultaneously, one of the callers hears MOH. This happened if two unmarked users entered simultaneously and also if a waitmarked and a marked user entered simultaneously. * Created a confbridge internal MOH API to eliminate the inlined MOH handling code. Note that the conference mixing bridge needs to be locked when actually starting/stopping MOH because there is a small window between the conference join unsuspend MOH and actually joining the mixing bridge. * Created the concept of suspended MOH so it can be interrupted while conference join announcements to the user and DTMF features can operate. * Suspend any MOH until the user is about to actually join the mixing bridge of the conference. This way any pre-join file playback does not need to worry about MOH. * Made post-join actions only play deferred entry announcement files. Changing the user/conference state during that time is not protected or controlled by the state machine. (closes issue ASTERISK-20606) Reported by: Eugenia Belova Tested by: rmudgett Review: https://reviewboard.asterisk.org/r/2232/ ........ Merged revisions 377992 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@377993 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -271,6 +271,32 @@ struct ast_bridge {
|
||||
*/
|
||||
struct ast_bridge *ast_bridge_new(uint32_t capabilities, int flags);
|
||||
|
||||
/*!
|
||||
* \brief Lock the bridge.
|
||||
*
|
||||
* \param bridge Bridge to lock
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
#define ast_bridge_lock(bridge) _ast_bridge_lock(bridge, __FILE__, __PRETTY_FUNCTION__, __LINE__, #bridge)
|
||||
static inline void _ast_bridge_lock(struct ast_bridge *bridge, const char *file, const char *function, int line, const char *var)
|
||||
{
|
||||
__ao2_lock(bridge, AO2_LOCK_REQ_MUTEX, file, function, line, var);
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Unlock the bridge.
|
||||
*
|
||||
* \param bridge Bridge to unlock
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
#define ast_bridge_unlock(bridge) _ast_bridge_unlock(bridge, __FILE__, __PRETTY_FUNCTION__, __LINE__, #bridge)
|
||||
static inline void _ast_bridge_unlock(struct ast_bridge *bridge, const char *file, const char *function, int line, const char *var)
|
||||
{
|
||||
__ao2_unlock(bridge, file, function, line, var);
|
||||
}
|
||||
|
||||
/*! \brief See if it is possible to create a bridge
|
||||
*
|
||||
* \param capabilities The capabilities that the bridge will use
|
||||
|
||||
Reference in New Issue
Block a user