summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2015-01-15 17:35:05 +0000
committerRichard Mudgett <rmudgett@digium.com>2015-01-15 17:35:05 +0000
commitfa80d9658df8aff71a8975ab7d1fe477ea3f99b9 (patch)
treec2ab69796f62770313970a8acb902021ef27f8e5 /res
parent6c426e86bd470c3a2f3b73b3a070583c92c19af4 (diff)
res_fax.c, res_fax_spandsp.c: Remove redundant locking.
When FAX was developed, apparently the faxregistry.container used to be a linked list that was converted to an ao2 container. Some of the replacement ao2 container operations still had explicit lock/unlocks around them. Three off nominal code paths in res_fax.c and res_fax_spandsp.c unlock the channel even though the routine did not lock the channel and other code paths in the routine do not unlock the channel. Review: https://reviewboard.asterisk.org/r/4340/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430687 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res')
-rw-r--r--res/res_fax.c22
-rw-r--r--res/res_fax_spandsp.c4
2 files changed, 6 insertions, 20 deletions
diff --git a/res/res_fax.c b/res/res_fax.c
index 8a796ef69..cb282e5bc 100644
--- a/res/res_fax.c
+++ b/res/res_fax.c
@@ -1626,21 +1626,15 @@ static int generic_fax_exec(struct ast_channel *chan, struct ast_fax_session_det
orig_write_format = ao2_bump(ast_channel_writeformat(chan));
if (ast_set_write_format(chan, ast_format_slin) < 0) {
ast_log(LOG_ERROR, "channel '%s' failed to set write format to signed linear'.\n", ast_channel_name(chan));
- ao2_lock(faxregistry.container);
- ao2_unlink(faxregistry.container, fax);
- ao2_unlock(faxregistry.container);
- ao2_ref(fax, -1);
- ast_channel_unlock(chan);
+ ao2_unlink(faxregistry.container, fax);
+ ao2_ref(fax, -1);
return -1;
}
orig_read_format = ao2_bump(ast_channel_readformat(chan));
if (ast_set_read_format(chan, ast_format_slin) < 0) {
ast_log(LOG_ERROR, "channel '%s' failed to set read format to signed linear.\n", ast_channel_name(chan));
- ao2_lock(faxregistry.container);
- ao2_unlink(faxregistry.container, fax);
- ao2_unlock(faxregistry.container);
- ao2_ref(fax, -1);
- ast_channel_unlock(chan);
+ ao2_unlink(faxregistry.container, fax);
+ ao2_ref(fax, -1);
return -1;
}
if (fax->smoother) {
@@ -1818,9 +1812,7 @@ static int generic_fax_exec(struct ast_channel *chan, struct ast_fax_session_det
}
if (fax) {
- ao2_lock(faxregistry.container);
ao2_unlink(faxregistry.container, fax);
- ao2_unlock(faxregistry.container);
ao2_ref(fax, -1);
}
@@ -2806,18 +2798,14 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
static void destroy_v21_sessions(struct fax_gateway *gateway)
{
if (gateway->chan_v21_session) {
- ao2_lock(faxregistry.container);
ao2_unlink(faxregistry.container, gateway->chan_v21_session);
- ao2_unlock(faxregistry.container);
ao2_ref(gateway->chan_v21_session, -1);
gateway->chan_v21_session = NULL;
}
if (gateway->peer_v21_session) {
- ao2_lock(faxregistry.container);
ao2_unlink(faxregistry.container, gateway->peer_v21_session);
- ao2_unlock(faxregistry.container);
ao2_ref(gateway->peer_v21_session, -1);
gateway->peer_v21_session = NULL;
@@ -2835,9 +2823,7 @@ static void destroy_gateway(void *data)
fax_session_release(gateway->s, gateway->token);
gateway->token = NULL;
- ao2_lock(faxregistry.container);
ao2_unlink(faxregistry.container, gateway->s);
- ao2_unlock(faxregistry.container);
ao2_ref(gateway->s, -1);
gateway->s = NULL;
diff --git a/res/res_fax_spandsp.c b/res/res_fax_spandsp.c
index 1df2d8160..914b732a6 100644
--- a/res/res_fax_spandsp.c
+++ b/res/res_fax_spandsp.c
@@ -836,8 +836,8 @@ static int spandsp_fax_gateway_start(struct ast_fax_session *s)
p->ist38 = 1;
p->ast_t38_state = ast_channel_get_t38_state(s->chan);
- if (!(peer = ast_channel_bridge_peer(s->chan))) {
- ast_channel_unlock(s->chan);
+ peer = ast_channel_bridge_peer(s->chan);
+ if (!peer) {
return -1;
}