diff options
author | Joshua Colp <jcolp@digium.com> | 2013-12-18 19:28:05 +0000 |
---|---|---|
committer | Joshua Colp <jcolp@digium.com> | 2013-12-18 19:28:05 +0000 |
commit | e2630fcd516b8f794bf342d9fd267b0c905e79ce (patch) | |
tree | f6cd5cf70eb9af24b239d78391aed7472c09dd7f /tests | |
parent | e23b8d19a49d4ee4faf3dc167ddb7ba7afe36a46 (diff) |
channels: Return allocated channels locked.
This change makes ast_channel_alloc return allocated channels
locked. By doing so no other thread can acquire, lock, and manipulate
the channel before it is completely set up.
(closes issue AST-1256)
Review: https://reviewboard.asterisk.org/r/3067/
........
Merged revisions 404204 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@404210 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_app.c | 12 | ||||
-rw-r--r-- | tests/test_cdr.c | 18 | ||||
-rw-r--r-- | tests/test_cel.c | 5 | ||||
-rw-r--r-- | tests/test_stasis_channels.c | 6 | ||||
-rw-r--r-- | tests/test_substitution.c | 1 | ||||
-rw-r--r-- | tests/test_voicemail_api.c | 2 |
6 files changed, 40 insertions, 4 deletions
diff --git a/tests/test_app.c b/tests/test_app.c index f47b052e5..92da42022 100644 --- a/tests/test_app.c +++ b/tests/test_app.c @@ -175,21 +175,25 @@ AST_TEST_DEFINE(app_group) "'%s', '%s', '%s', '%s'\n", group1_full, group2_full, category1_full, category2_full); if (!(test_channel1 = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, NULL, - NULL, NULL, 0, 0, "TestChannel1"))) { + NULL, NULL, 0, 0, "TestChannel1"))) { goto exit_group_test; } + ast_channel_unlock(test_channel1); if (!(test_channel2 = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, NULL, - NULL, NULL, 0, 0, "TestChannel2"))) { + NULL, NULL, 0, 0, "TestChannel2"))) { goto exit_group_test; } + ast_channel_unlock(test_channel2); if (!(test_channel3 = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, NULL, - NULL, NULL, 0, 0, "TestChannel3"))) { + NULL, NULL, 0, 0, "TestChannel3"))) { goto exit_group_test; } + ast_channel_unlock(test_channel3); if (!(test_channel4 = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, NULL, - NULL, NULL, 0, 0, "TestChannel4"))) { + NULL, NULL, 0, 0, "TestChannel4"))) { goto exit_group_test; } + ast_channel_unlock(test_channel4); ast_app_group_set_channel(test_channel1, group1_full); ast_app_group_set_channel(test_channel2, group2_full); diff --git a/tests/test_cdr.c b/tests/test_cdr.c index 6d1626b36..e70a0641b 100644 --- a/tests/test_cdr.c +++ b/tests/test_cdr.c @@ -238,6 +238,7 @@ static void clear_mock_cdr_backend(void) ast_channel_set_caller((channel_var), (caller_id), NULL); \ ast_copy_string((expected_record)->uniqueid, ast_channel_uniqueid((channel_var)), sizeof((expected_record)->uniqueid)); \ ast_copy_string((expected_record)->linkedid, ast_channel_linkedid((channel_var)), sizeof((expected_record)->linkedid)); \ + ast_channel_unlock((channel_var)); \ } while (0) /*! \brief Create a \ref test_cdr_chan_tech for Bob, and set the expected @@ -247,6 +248,7 @@ static void clear_mock_cdr_backend(void) ast_channel_set_caller((channel_var), (caller_id), NULL); \ ast_copy_string((expected_record)->uniqueid, ast_channel_uniqueid((channel_var)), sizeof((expected_record)->uniqueid)); \ ast_copy_string((expected_record)->linkedid, ast_channel_linkedid((channel_var)), sizeof((expected_record)->linkedid)); \ + ast_channel_unlock((channel_var)); \ } while (0) /*! \brief Create a \ref test_cdr_chan_tech for Charlie, and set the expected @@ -256,6 +258,7 @@ static void clear_mock_cdr_backend(void) ast_channel_set_caller((channel_var), (caller_id), NULL); \ ast_copy_string((expected_record)->uniqueid, ast_channel_uniqueid((channel_var)), sizeof((expected_record)->uniqueid)); \ ast_copy_string((expected_record)->linkedid, ast_channel_linkedid((channel_var)), sizeof((expected_record)->linkedid)); \ + ast_channel_unlock((channel_var)); \ } while (0) /*! \brief Create a \ref test_cdr_chan_tech for Charlie, and set the expected @@ -265,6 +268,7 @@ static void clear_mock_cdr_backend(void) ast_channel_set_caller((channel_var), (caller_id), NULL); \ ast_copy_string((expected_record)->uniqueid, ast_channel_uniqueid((channel_var)), sizeof((expected_record)->uniqueid)); \ ast_copy_string((expected_record)->linkedid, ast_channel_linkedid((channel_var)), sizeof((expected_record)->linkedid)); \ + ast_channel_unlock((channel_var)); \ } while (0) /*! \brief Emulate a channel entering into an application */ @@ -563,6 +567,7 @@ AST_TEST_DEFINE(test_cdr_outbound_bridged_call) ast_test_validate(test, !ast_bridge_impart(bridge, chan_alice, NULL, NULL, AST_BRIDGE_IMPART_CHAN_DEPARTABLE)); chan_bob = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_alice), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_bob); ast_copy_string(bob_expected.linkedid, ast_channel_linkedid(chan_bob), sizeof(bob_expected.linkedid)); ast_copy_string(bob_expected.uniqueid, ast_channel_uniqueid(chan_bob), sizeof(bob_expected.uniqueid)); ast_set_flag(ast_channel_flags(chan_bob), AST_FLAG_OUTGOING); @@ -1133,6 +1138,7 @@ AST_TEST_DEFINE(test_cdr_dial_unanswered) EMULATE_APP_DATA(chan_caller, 1, "Dial", "CDRTestChannel/Bob"); chan_callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_callee); ast_set_flag(ast_channel_flags(chan_callee), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_callee, 0, "AppDial", "(Outgoing Line)"); @@ -1194,6 +1200,7 @@ AST_TEST_DEFINE(test_cdr_dial_busy) EMULATE_APP_DATA(chan_caller, 1, "Dial", CHANNEL_TECH_NAME "/Bob"); chan_callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_callee); ast_set_flag(ast_channel_flags(chan_callee), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_callee, 0, "AppDial", "(Outgoing Line)"); @@ -1254,6 +1261,7 @@ AST_TEST_DEFINE(test_cdr_dial_congestion) EMULATE_APP_DATA(chan_caller, 1, "Dial", CHANNEL_TECH_NAME "/Bob"); chan_callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_callee); ast_set_flag(ast_channel_flags(chan_callee), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_callee, 0, "AppDial", "(Outgoing Line)"); @@ -1314,6 +1322,7 @@ AST_TEST_DEFINE(test_cdr_dial_unavailable) EMULATE_APP_DATA(chan_caller, 1, "Dial", CHANNEL_TECH_NAME "/Bob"); chan_callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_callee); ast_set_flag(ast_channel_flags(chan_callee), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_callee, 0, "AppDial", "(Outgoing Line)"); @@ -1375,6 +1384,7 @@ AST_TEST_DEFINE(test_cdr_dial_caller_cancel) EMULATE_APP_DATA(chan_caller, 1, "Dial", CHANNEL_TECH_NAME "/Bob"); chan_callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_callee); ast_set_flag(ast_channel_flags(chan_callee), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_callee, 0, "AppDial", "(Outgoing Line)"); @@ -1476,14 +1486,17 @@ AST_TEST_DEFINE(test_cdr_dial_parallel_failed) /* Outbound channels are created */ chan_bob = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_bob); ast_set_flag(ast_channel_flags(chan_bob), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_bob, 0, "AppDial", "(Outgoing Line)"); chan_charlie = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "300", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Charlie"); + ast_channel_unlock(chan_charlie); ast_set_flag(ast_channel_flags(chan_charlie), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_charlie, 0, "AppDial", "(Outgoing Line)"); chan_david = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "400", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/David"); + ast_channel_unlock(chan_david); ast_set_flag(ast_channel_flags(chan_david), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_david, 0, "AppDial", "(Outgoing Line)"); @@ -1589,6 +1602,7 @@ AST_TEST_DEFINE(test_cdr_dial_answer_no_bridge) EMULATE_APP_DATA(chan_caller, 1, "Dial", CHANNEL_TECH_NAME "/Bob"); chan_callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_callee); ast_set_flag(ast_channel_flags(chan_callee), AST_FLAG_OUTGOING); COPY_IDS(chan_callee, &bob_expected_one); @@ -1656,6 +1670,7 @@ AST_TEST_DEFINE(test_cdr_dial_answer_twoparty_bridge_a) EMULATE_APP_DATA(chan_caller, 1, "Dial", CHANNEL_TECH_NAME "/Bob"); chan_callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_callee); ast_set_flag(ast_channel_flags(chan_callee), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_callee, 0, "AppDial", "(Outgoing Line)"); @@ -1731,6 +1746,7 @@ AST_TEST_DEFINE(test_cdr_dial_answer_twoparty_bridge_b) EMULATE_APP_DATA(chan_caller, 1, "Dial", CHANNEL_TECH_NAME "/Bob"); chan_callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, "200", NULL, NULL, ast_channel_linkedid(chan_caller), 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_callee); ast_set_flag(ast_channel_flags(chan_callee), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_callee, 0, "AppDial", "(Outgoing Line)"); @@ -1889,6 +1905,7 @@ AST_TEST_DEFINE(test_cdr_dial_answer_multiparty) EMULATE_APP_DATA(chan_alice, 1, "Dial", CHANNEL_TECH_NAME "/Bob"); chan_bob = ast_channel_alloc(0, AST_STATE_DOWN, "200", "Bob", "200", "200", "default", NULL, 0, CHANNEL_TECH_NAME "/Bob"); + ast_channel_unlock(chan_bob); ast_set_flag(ast_channel_flags(chan_bob), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_bob, 0, "AppDial", "(Outgoing Line)"); ast_copy_string(bob_expected_one.uniqueid, ast_channel_uniqueid(chan_bob), sizeof(bob_expected_one.uniqueid)); @@ -1902,6 +1919,7 @@ AST_TEST_DEFINE(test_cdr_dial_answer_multiparty) ast_copy_string(charlie_expected_two.linkedid, ast_channel_linkedid(chan_alice), sizeof(charlie_expected_two.linkedid)); chan_david = ast_channel_alloc(0, AST_STATE_DOWN, "400", "David", "400", "400", "default", NULL, 0, CHANNEL_TECH_NAME "/David"); + ast_channel_unlock(chan_david); ast_set_flag(ast_channel_flags(chan_david), AST_FLAG_OUTGOING); EMULATE_APP_DATA(chan_david, 0, "AppDial", "(Outgoing Line)"); diff --git a/tests/test_cel.c b/tests/test_cel.c index 7732f3e9d..7da4f9ee8 100644 --- a/tests/test_cel.c +++ b/tests/test_cel.c @@ -201,24 +201,28 @@ static void do_sleep(void) #define CREATE_ALICE_CHANNEL(channel_var, caller_id) do { \ (channel_var) = ast_channel_alloc(0, AST_STATE_DOWN, (caller_id)->id.number.str, (caller_id)->id.name.str, "100", "100", "default", NULL, 0, CHANNEL_TECH_NAME "/Alice"); \ APPEND_EVENT(channel_var, AST_CEL_CHANNEL_START, NULL, NULL); \ + ast_channel_unlock((channel_var)); \ } while (0) /*! \brief Create a \ref test_cel_chan_tech for Bob. */ #define CREATE_BOB_CHANNEL(channel_var, caller_id) do { \ (channel_var) = ast_channel_alloc(0, AST_STATE_DOWN, (caller_id)->id.number.str, (caller_id)->id.name.str, "200", "200", "default", NULL, 0, CHANNEL_TECH_NAME "/Bob"); \ APPEND_EVENT(channel_var, AST_CEL_CHANNEL_START, NULL, NULL); \ + ast_channel_unlock((channel_var)); \ } while (0) /*! \brief Create a \ref test_cel_chan_tech for Charlie. */ #define CREATE_CHARLIE_CHANNEL(channel_var, caller_id) do { \ (channel_var) = ast_channel_alloc(0, AST_STATE_DOWN, (caller_id)->id.number.str, (caller_id)->id.name.str, "300", "300", "default", NULL, 0, CHANNEL_TECH_NAME "/Charlie"); \ APPEND_EVENT(channel_var, AST_CEL_CHANNEL_START, NULL, NULL); \ + ast_channel_unlock((channel_var)); \ } while (0) /*! \brief Create a \ref test_cel_chan_tech for David. */ #define CREATE_DAVID_CHANNEL(channel_var, caller_id) do { \ (channel_var) = ast_channel_alloc(0, AST_STATE_DOWN, (caller_id)->id.number.str, (caller_id)->id.name.str, "400", "400", "default", NULL, 0, CHANNEL_TECH_NAME "/David"); \ APPEND_EVENT(channel_var, AST_CEL_CHANNEL_START, NULL, NULL); \ + ast_channel_unlock((channel_var)); \ } while (0) /*! \brief Emulate a channel entering into an application */ @@ -717,6 +721,7 @@ AST_TEST_DEFINE(test_cel_single_multiparty_bridge) #define START_DIALED_FULL(caller, callee, number, name) do { \ callee = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, number, NULL, NULL, ast_channel_linkedid(caller), 0, CHANNEL_TECH_NAME "/" name); \ + ast_channel_unlock(callee); \ if (append_expected_event(callee, AST_CEL_CHANNEL_START, NULL, NULL, NULL)) { \ return AST_TEST_FAIL; \ } \ diff --git a/tests/test_stasis_channels.c b/tests/test_stasis_channels.c index 45f1e2ba3..de445458c 100644 --- a/tests/test_stasis_channels.c +++ b/tests/test_stasis_channels.c @@ -73,6 +73,7 @@ AST_TEST_DEFINE(channel_blob_create) type = stasis_message_type_create("test-type", NULL); chan = ast_channel_alloc(0, AST_STATE_DOWN, "100", "Alice", "100", "100", "default", NULL, 0, "TEST/Alice"); + ast_channel_unlock(chan); json = ast_json_pack("{s: s}", "foo", "bar"); @@ -125,6 +126,7 @@ AST_TEST_DEFINE(null_blob) type = stasis_message_type_create("test-type", NULL); chan = ast_channel_alloc(0, AST_STATE_DOWN, "100", "Alice", "100", "100", "default", NULL, 0, "TEST/Alice"); + ast_channel_unlock(chan); json = ast_json_pack("{s: s}", "foo", "bar"); @@ -192,8 +194,11 @@ AST_TEST_DEFINE(multi_channel_blob_snapshots) json = ast_json_pack("{s: s}", "type", "test"); chan_alice = ast_channel_alloc(0, AST_STATE_DOWN, "100", "Alice", "100", "100", "default", NULL, 0, "TEST/Alice"); + ast_channel_unlock(chan_alice); chan_bob = ast_channel_alloc(0, AST_STATE_DOWN, "200", "Bob", "200", "200", "default", NULL, 0, "TEST/Bob"); + ast_channel_unlock(chan_bob); chan_charlie = ast_channel_alloc(0, AST_STATE_DOWN, "300", "Bob", "300", "300", "default", NULL, 0, "TEST/Charlie"); + ast_channel_unlock(chan_charlie); blob = ast_multi_channel_blob_create(json); ast_multi_channel_blob_add_channel(blob, "Caller", ast_channel_snapshot_create(chan_alice)); @@ -251,6 +256,7 @@ AST_TEST_DEFINE(channel_snapshot_json) ast_test_validate(test, NULL == ast_channel_snapshot_to_json(NULL, NULL)); chan = ast_channel_alloc(0, AST_STATE_DOWN, "cid_num", "cid_name", "acctcode", "exten", "context", NULL, 0, "TEST/name"); + ast_channel_unlock(chan); ast_test_validate(test, NULL != chan); snapshot = ast_channel_snapshot_create(chan); ast_test_validate(test, NULL != snapshot); diff --git a/tests/test_substitution.c b/tests/test_substitution.c index 0fa0a584e..4f87aebd9 100644 --- a/tests/test_substitution.c +++ b/tests/test_substitution.c @@ -244,6 +244,7 @@ AST_TEST_DEFINE(test_substitution) ast_test_status_update(test, "Testing variable substitution ...\n"); c = ast_channel_alloc(0, 0, "", "", "", "", "", "", 0, "Test/substitution"); + ast_channel_unlock(c); #define TEST(t) if (t == AST_TEST_FAIL) { res = AST_TEST_FAIL; } #if 0 diff --git a/tests/test_voicemail_api.c b/tests/test_voicemail_api.c index 01efeeec2..b21ab1f87 100644 --- a/tests/test_voicemail_api.c +++ b/tests/test_voicemail_api.c @@ -833,6 +833,8 @@ static struct ast_channel *test_vm_api_create_mock_channel(void) ast_format_set(ast_channel_rawreadformat(mock_channel), AST_FORMAT_GSM, 0); ast_channel_tech_set(mock_channel, &mock_channel_tech); + ast_channel_unlock(mock_channel); + return mock_channel; } |