From 9fca20acc17f48d415406b8a7c3e162a6c5ffe01 Mon Sep 17 00:00:00 2001
From: James Golovich <james@gnuinter.net>
Date: Sat, 27 Mar 2004 07:34:37 +0000
Subject: [PATCH] Fixup read/write locking

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2573 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 apps/app_ices.c   |  4 ++--
 apps/app_nbscat.c |  4 ++--
 channel.c         | 15 ++++++++++-----
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/apps/app_ices.c b/apps/app_ices.c
index 294ecc6047..27abab8085 100755
--- a/apps/app_ices.c
+++ b/apps/app_ices.c
@@ -113,7 +113,7 @@ static int ices_exec(struct ast_channel *chan, void *data)
 	}
 
 	oreadformat = chan->readformat;
-	res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
+	res = ast_set_read_format(chan, AST_FORMAT_SLINEAR, 0);
 	if (res < 0) {
 		close(fds[0]);
 		close(fds[1]);
@@ -164,7 +164,7 @@ static int ices_exec(struct ast_channel *chan, void *data)
 	if (pid > -1)
 		kill(pid, SIGKILL);
 	if (!res && oreadformat)
-		ast_set_read_format(chan, oreadformat);
+		ast_set_read_format(chan, oreadformat, 0);
 	return res;
 }
 
diff --git a/apps/app_nbscat.c b/apps/app_nbscat.c
index e99d2f265a..6c28085516 100755
--- a/apps/app_nbscat.c
+++ b/apps/app_nbscat.c
@@ -109,7 +109,7 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
 	ast_stopstream(chan);
 
 	owriteformat = chan->writeformat;
-	res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
+	res = ast_set_write_format(chan, AST_FORMAT_SLINEAR, 0);
 	if (res < 0) {
 		ast_log(LOG_WARNING, "Unable to set write format to signed linear\n");
 		return -1;
@@ -173,7 +173,7 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
 	if (pid > -1)
 		kill(pid, SIGKILL);
 	if (!res && owriteformat)
-		ast_set_write_format(chan, owriteformat);
+		ast_set_write_format(chan, owriteformat, 0);
 	return res;
 }
 
diff --git a/channel.c b/channel.c
index 4c46e70174..0abc3521e8 100755
--- a/channel.c
+++ b/channel.c
@@ -1505,7 +1505,8 @@ int ast_set_write_format(struct ast_channel *chan, int fmts, int needlock)
 	int native;
 	int res;
 	
-	ast_mutex_lock(&chan->lock);
+	if (needlock)
+		ast_mutex_lock(&chan->lock);
 	native = chan->nativeformats;
 	fmt = fmts;
 	
@@ -1513,7 +1514,8 @@ int ast_set_write_format(struct ast_channel *chan, int fmts, int needlock)
 	if (res < 0) {
 		ast_log(LOG_NOTICE, "Unable to find a path from %s to %s\n",
 			ast_getformatname(fmts), ast_getformatname(chan->nativeformats));
-		ast_mutex_unlock(&chan->lock);
+		if (needlock)
+			ast_mutex_unlock(&chan->lock);
 		return -1;
 	}
 	
@@ -1528,7 +1530,8 @@ int ast_set_write_format(struct ast_channel *chan, int fmts, int needlock)
 	chan->pvt->writetrans = ast_translator_build_path(chan->pvt->rawwriteformat, chan->writeformat);
 	if (option_debug)
 		ast_log(LOG_DEBUG, "Set channel %s to write format %s\n", chan->name, ast_getformatname(chan->writeformat));
-	ast_mutex_unlock(&chan->lock);
+	if (needlock)
+		ast_mutex_unlock(&chan->lock);
 	return 0;
 }
 
@@ -1547,7 +1550,8 @@ int ast_set_read_format(struct ast_channel *chan, int fmts, int needlock)
 	if (res < 0) {
 		ast_log(LOG_NOTICE, "Unable to find a path from %s to %s\n",
 			ast_getformatname(chan->nativeformats), ast_getformatname(fmts));
-		ast_mutex_unlock(&chan->lock);
+		if (needlock)
+			ast_mutex_unlock(&chan->lock);
 		return -1;
 	}
 	
@@ -1563,7 +1567,8 @@ int ast_set_read_format(struct ast_channel *chan, int fmts, int needlock)
 	if (option_debug)
 		ast_log(LOG_DEBUG, "Set channel %s to read format %s\n", 
 			chan->name, ast_getformatname(chan->readformat));
-	ast_mutex_unlock(&chan->lock);
+	if (needlock)
+		ast_mutex_unlock(&chan->lock);
 	return 0;
 }
 
-- 
GitLab