res_fax.c, res_fax_spandsp.c: Remove redundant locking.
authorRichard Mudgett <rmudgett@digium.com>
Thu, 15 Jan 2015 17:36:37 +0000 (17:36 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 15 Jan 2015 17:36:37 +0000 (17:36 +0000)
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/
........

Merged revisions 430687 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@430688 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_fax.c
res/res_fax_spandsp.c

index 8a796ef..cb282e5 100644 (file)
@@ -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;
index 1df2d81..914b732 100644 (file)
@@ -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;
        }