mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-13 16:21:01 +00:00
bridge_softmix.c: Fix crash if channel fails to join mixing tech.
softmix_bridge_join() failed because of an allocation failure. To address this, the softmix bridge technology now checks if the channel failed to join softmix successfully. In addition, the bridge now begins the process of kicking the channel out of the bridge so we don't have channels partially in the bridge for very long. * Fix the test_channel_feature_hooks.c unit tests. The test channel must have a valid codec to join the simple_bridge technology. This patch makes joining a bridge more strict by not allowing partially joined channels to remain in the bridge. Change-Id: I97e2ade6a2bcd1214f24fb839fda948825b61a2b
This commit is contained in:
@@ -40,6 +40,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
#include "asterisk/bridge.h"
|
||||
#include "asterisk/bridge_basic.h"
|
||||
#include "asterisk/features.h"
|
||||
#include "asterisk/format_cache.h"
|
||||
|
||||
#define TEST_CATEGORY "/channels/features/"
|
||||
|
||||
@@ -47,6 +48,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
|
||||
#define TEST_BACKEND_NAME "Features Test Logging"
|
||||
|
||||
#define TEST_CHANNEL_FORMAT ast_format_slin
|
||||
|
||||
/*! \brief A channel technology used for the unit tests */
|
||||
static struct ast_channel_tech test_features_chan_tech = {
|
||||
.type = CHANNEL_TECH_NAME,
|
||||
@@ -94,6 +97,11 @@ static void wait_for_unbridged(struct ast_channel *channel)
|
||||
#define START_CHANNEL(channel, name, number) do { \
|
||||
channel = ast_channel_alloc(0, AST_STATE_UP, number, name, number, number, \
|
||||
"default", NULL, NULL, 0, CHANNEL_TECH_NAME "/" name); \
|
||||
ast_channel_nativeformats_set(channel, test_features_chan_tech.capabilities); \
|
||||
ast_channel_set_rawwriteformat(channel, TEST_CHANNEL_FORMAT); \
|
||||
ast_channel_set_rawreadformat(channel, TEST_CHANNEL_FORMAT); \
|
||||
ast_channel_set_writeformat(channel, TEST_CHANNEL_FORMAT); \
|
||||
ast_channel_set_readformat(channel, TEST_CHANNEL_FORMAT); \
|
||||
ast_channel_unlock(channel); \
|
||||
} while (0)
|
||||
|
||||
@@ -329,12 +337,19 @@ static int unload_module(void)
|
||||
AST_TEST_UNREGISTER(test_features_channel_interval);
|
||||
|
||||
ast_channel_unregister(&test_features_chan_tech);
|
||||
ao2_cleanup(test_features_chan_tech.capabilities);
|
||||
test_features_chan_tech.capabilities = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int load_module(void)
|
||||
{
|
||||
test_features_chan_tech.capabilities = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
|
||||
if (!test_features_chan_tech.capabilities) {
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
}
|
||||
ast_format_cap_append(test_features_chan_tech.capabilities, TEST_CHANNEL_FORMAT, 0);
|
||||
ast_channel_register(&test_features_chan_tech);
|
||||
|
||||
AST_TEST_REGISTER(test_features_channel_dtmf);
|
||||
|
Reference in New Issue
Block a user