From 97958e56e0d69f55a168fc22ac77de04a4805602 Mon Sep 17 00:00:00 2001
From: Anthony Minessale <anthony.minessale@gmail.com>
Date: Wed, 10 Sep 2008 19:27:17 +0000
Subject: [PATCH] fix OPENZAP-14

git-svn-id: http://svn.openzap.org/svn/openzap/trunk@553 a93c3328-9c30-0410-af19-c9cd2b2d52af
---
 libs/freetdm/mod_openzap/mod_openzap.c | 2 +-
 libs/freetdm/src/zap_io.c              | 9 +++++++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/libs/freetdm/mod_openzap/mod_openzap.c b/libs/freetdm/mod_openzap/mod_openzap.c
index 0027451179..9a1ac3423f 100644
--- a/libs/freetdm/mod_openzap/mod_openzap.c
+++ b/libs/freetdm/mod_openzap/mod_openzap.c
@@ -1824,7 +1824,7 @@ SWITCH_STANDARD_API(oz_function)
 					int j;
 					
 					stream->write_function(stream, "+OK\n");
-					for(j = 0; j <= span->chan_count; j++) {
+					for(j = 1; j <= span->chan_count; j++) {
 						dump_chan(span, j, stream);
 					}
 
diff --git a/libs/freetdm/src/zap_io.c b/libs/freetdm/src/zap_io.c
index 69b920c3f1..864b19ffd1 100644
--- a/libs/freetdm/src/zap_io.c
+++ b/libs/freetdm/src/zap_io.c
@@ -345,7 +345,7 @@ zap_status_t zap_span_close_all(void)
 	for(i = 1; i <= globals.span_index; i++) {
 		span = globals.spans[i];
 		if (zap_test_flag(span, ZAP_SPAN_CONFIGURED)) {
-			for(j = 0; j <= span->chan_count && span->channels[j]; j++) {
+			for(j = 1; j <= span->chan_count && span->channels[j]; j++) {
 				zap_channel_destroy(span->channels[j]);
 			}
 		} 
@@ -429,6 +429,7 @@ zap_status_t zap_span_add_channel(zap_span_t *span, zap_socket_t sockfd, zap_cha
 				return ZAP_FAIL;
 			}
 			span->channels[span->chan_count] = new_chan;
+			memset(new_chan, 0, sizeof(*new_chan));
 		}
 
 		new_chan->type = type;
@@ -869,7 +870,11 @@ zap_status_t zap_channel_open_any(uint32_t span_id, zap_direction_t direction, z
 				}
 			}
 			
-			check = span->channels[i];
+			if (!(check = span->channels[i])) {
+				status = ZAP_FAIL;
+				zap_mutex_unlock(span->mutex);
+				goto done;
+			}
 			
 			if (zap_test_flag(check, ZAP_CHANNEL_READY) && 
 				!zap_test_flag(check, ZAP_CHANNEL_INUSE) &&