diff options
Diffstat (limited to 'res/res_fax.c')
-rw-r--r-- | res/res_fax.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/res/res_fax.c b/res/res_fax.c index 6341a55ff..55bd3c6b7 100644 --- a/res/res_fax.c +++ b/res/res_fax.c @@ -3057,12 +3057,12 @@ static struct ast_frame *fax_gateway_framehook(struct ast_channel *chan, struct ast_channel_unlock(chan); peer = ast_channel_bridge_peer(chan); - ast_channel_lock(chan); if (peer) { ast_set_read_format(peer, &gateway->peer_read_format); ast_set_read_format(peer, &gateway->peer_write_format); ast_channel_make_compatible(chan, peer); } + ast_channel_lock(chan); } return NULL; } @@ -3084,7 +3084,7 @@ static struct ast_frame *fax_gateway_framehook(struct ast_channel *chan, struct return f; } - if (!gateway->bridged && peer) { + if (!gateway->bridged) { /* don't start a gateway if neither channel can handle T.38 */ if (ast_channel_get_t38_state(chan) == T38_STATE_UNAVAILABLE && ast_channel_get_t38_state(peer) == T38_STATE_UNAVAILABLE) { ast_debug(1, "not starting gateway for %s and %s; neither channel supports T.38\n", ast_channel_name(chan), ast_channel_name(peer)); @@ -3113,10 +3113,12 @@ static struct ast_frame *fax_gateway_framehook(struct ast_channel *chan, struct ast_set_read_format_by_id(chan, AST_FORMAT_SLINEAR); ast_set_write_format_by_id(chan, AST_FORMAT_SLINEAR); + ast_channel_unlock(chan); ast_set_read_format_by_id(peer, AST_FORMAT_SLINEAR); ast_set_write_format_by_id(peer, AST_FORMAT_SLINEAR); ast_channel_make_compatible(chan, peer); + ast_channel_lock(chan); gateway->bridged = 1; } @@ -3381,10 +3383,10 @@ static struct ast_frame *fax_detect_framehook(struct ast_channel *chan, struct a ast_set_read_format(chan, &faxdetect->orig_format); ast_channel_unlock(chan); peer = ast_channel_bridge_peer(chan); - ast_channel_lock(chan); if (peer) { ast_channel_make_compatible(chan, peer); } + ast_channel_lock(chan); return NULL; case AST_FRAMEHOOK_EVENT_READ: if (f) { |