[svn-commits] pcadach: trunk r44187 - in /trunk: ./ channels/chan_h323.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Mon Oct 2 11:57:50 MST 2006


Author: pcadach
Date: Mon Oct  2 13:57:49 2006
New Revision: 44187

URL: http://svn.digium.com/view/asterisk?rev=44187&view=rev
Log:
Merged revisions 44166 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r44166 | pcadach | 2006-10-02 23:15:11 +0600 (Пнд, 02 Окт 2006) | 1 line

Optimization of oh323_indicate(): less locks - less problems, plus single exit point
........

Modified:
    trunk/   (props changed)
    trunk/channels/chan_h323.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/channels/chan_h323.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_h323.c?rev=44187&r1=44186&r2=44187&view=diff
==============================================================================
--- trunk/channels/chan_h323.c (original)
+++ trunk/channels/chan_h323.c Mon Oct  2 13:57:49 2006
@@ -873,6 +873,8 @@
 	got_progress = pvt->got_progress;
 	if (condition == AST_CONTROL_PROGRESS)
 		pvt->got_progress = 1;
+	else if ((condition == AST_CONTROL_BUSY) || (condition == AST_CONTROL_CONGESTION))
+		pvt->alreadygone = 1;
 	ast_mutex_unlock(&pvt->lock);
 
 	if (h323debug)
@@ -883,72 +885,51 @@
 		if (c->_state == AST_STATE_RING || c->_state == AST_STATE_RINGING) {
 			h323_send_alerting(token);
 			res = (got_progress ? 0 : -1);	/* Do not simulate any audio tones if we got PROGRESS message */
-			break;
-		}
-		if (token)
-			free(token);
-		return -1;
+		}
+		break;
 	case AST_CONTROL_PROGRESS:
 		if (c->_state != AST_STATE_UP) {
 			/* Do not send PROGRESS message more than once */
 			if (!got_progress)
 				h323_send_progress(token);
-			break;
-		}
-		if (token)
-			free(token);
-		return -1;
+			res = 0;
+		}
+		break;
 	case AST_CONTROL_BUSY:
 		if (c->_state != AST_STATE_UP) {
 			h323_answering_call(token, 1);
-			ast_mutex_lock(&pvt->lock);
-			pvt->alreadygone = 1;
-			ast_mutex_unlock(&pvt->lock);
 			ast_softhangup_nolock(c, AST_SOFTHANGUP_DEV);
-			break;
-		}
-		if (token)
-			free(token);
-		return -1;
+			res = 0;
+		}
+		break;
 	case AST_CONTROL_CONGESTION:
 		if (c->_state != AST_STATE_UP) {
 			h323_answering_call(token, 1);
-			ast_mutex_lock(&pvt->lock);
-			pvt->alreadygone = 1;
-			ast_mutex_unlock(&pvt->lock);
 			ast_softhangup_nolock(c, AST_SOFTHANGUP_DEV);
-			break;
-		}
-		if (token)
-			free(token);
-		return -1;
+			res = 0;
+		}
+		break;
 	case AST_CONTROL_HOLD:
 		h323_hold_call(token, 1);
 		/* We should start MOH only if remote party isn't provide audio for us */
 		ast_moh_start(c, data, NULL);
-		if (token)
-			free(token);
-		return 0;
+		res = 0;
+		break;
 	case AST_CONTROL_UNHOLD:
 		h323_hold_call(token, 0);
 		ast_moh_stop(c);
-		if (token)
-			free(token);
-		return 0;
+		res = 0;
+		break;
 	case AST_CONTROL_PROCEEDING:
 	case -1:
-		if (token)
-			free(token);
-		return -1;
+		break;
 	default:
-		ast_log(LOG_WARNING, "Don't know how to indicate condition %d on %s\n", condition, token);
-		if (token)
-			free(token);
-		return -1;
+		ast_log(LOG_WARNING, "OH323: Don't know how to indicate condition %d on %s\n", condition, token);
+		break;
 	}
 
 	if (h323debug)
-		ast_log(LOG_DEBUG, "OH323: Indicated %d on %s\n", condition, token);
+		ast_log(LOG_DEBUG, "OH323: Indicated %d on %s, res=%d\n", condition, token, res);
 	if (token)
 		free(token);
 	oh323_update_info(c);



More information about the svn-commits mailing list