diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/channel.c | 11 | ||||
-rw-r--r-- | main/dial.c | 14 | ||||
-rw-r--r-- | main/features.c | 12 |
3 files changed, 16 insertions, 21 deletions
diff --git a/main/channel.c b/main/channel.c index c6df5f8b0..9932642c3 100644 --- a/main/channel.c +++ b/main/channel.c @@ -2640,8 +2640,13 @@ static void destroy_hooks(struct ast_channel *chan) } /*! \brief Hangup a channel */ -int ast_hangup(struct ast_channel *chan) +void ast_hangup(struct ast_channel *chan) { + /* Be NULL safe for RAII_VAR() usage. */ + if (!chan) { + return; + } + ast_autoservice_stop(chan); ast_channel_lock(chan); @@ -2669,7 +2674,7 @@ int ast_hangup(struct ast_channel *chan) ast_set_flag(ast_channel_flags(chan), AST_FLAG_ZOMBIE); destroy_hooks(chan); ast_channel_unlock(chan); - return 0; + return; } /* Mark as a zombie so a masquerade cannot be setup on this channel. */ @@ -2733,8 +2738,6 @@ int ast_hangup(struct ast_channel *chan) ast_cc_offer(chan); ast_channel_unref(chan); - - return 0; } int ast_raw_answer(struct ast_channel *chan) diff --git a/main/dial.c b/main/dial.c index ab35373c5..e13805ad4 100644 --- a/main/dial.c +++ b/main/dial.c @@ -942,10 +942,8 @@ void ast_dial_hangup(struct ast_dial *dial) AST_LIST_LOCK(&dial->channels); AST_LIST_TRAVERSE(&dial->channels, channel, list) { - if (channel->owner) { - ast_hangup(channel->owner); - channel->owner = NULL; - } + ast_hangup(channel->owner); + channel->owner = NULL; } AST_LIST_UNLOCK(&dial->channels); @@ -976,11 +974,11 @@ int ast_dial_destroy(struct ast_dial *dial) option_types[i].disable(channel->options[i]); channel->options[i] = NULL; } + /* Hang up channel if need be */ - if (channel->owner) { - ast_hangup(channel->owner); - channel->owner = NULL; - } + ast_hangup(channel->owner); + channel->owner = NULL; + /* Free structure */ ast_free(channel->tech); ast_free(channel->device); diff --git a/main/features.c b/main/features.c index df8151340..fd72b9cb2 100644 --- a/main/features.c +++ b/main/features.c @@ -2547,9 +2547,7 @@ static int builtin_atxfer(struct ast_channel *chan, struct ast_channel *peer, st * is up, hang it up as it has no one to talk to. */ ast_debug(1, "Everyone is hungup.\n"); - if (newchan) { - ast_hangup(newchan); - } + ast_hangup(newchan); ast_party_connected_line_free(&connected_line); return -1; } @@ -5586,18 +5584,14 @@ AST_TEST_DEFINE(features_test) /* find the real channel */ parked_chan = ast_channel_get_by_name("TestChannel1"); if (unpark_test_channel(parked_chan, &args)) { - if (parked_chan) { - ast_hangup(parked_chan); - } + ast_hangup(parked_chan); res = -1; } exit_features_test: - if (test_channel1) { - ast_hangup(test_channel1); - } + ast_hangup(test_channel1); force_reload_load = 1; ast_features_reload(); |