From 6fb26bad224ddbe86a2836e6d26afd4716cf13a9 Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Sun, 29 Jun 2003 23:23:54 +0000
Subject: [PATCH] Make masquerade compatible with timingfd

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1140 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channel.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/channel.c b/channel.c
index fb7d502bc1..8d5e9d8c75 100755
--- a/channel.c
+++ b/channel.c
@@ -1041,11 +1041,15 @@ struct ast_frame *ast_read(struct ast_channel *chan)
 		data = chan->timingdata;
 		pthread_mutex_unlock(&chan->lock);
 		if (func) {
+#if 0
+			ast_log(LOG_DEBUG, "Calling private function\n");
+#endif			
 			func(data);
 		} else {
 			blah = 0;
 			pthread_mutex_lock(&chan->lock);
 			ioctl(chan->timingfd, ZT_TIMERCONFIG, &blah);
+			chan->timingdata = NULL;
 			pthread_mutex_unlock(&chan->lock);
 		}
 		f =  &null_frame;
@@ -1901,8 +1905,9 @@ static int ast_do_masquerade(struct ast_channel *original)
 	/* Update the type. */
 	original->type = clone->type;
 	/* Copy the FD's */
-	for (x=0;x<AST_MAX_FDS;x++)
+	for (x=0;x<AST_MAX_FDS;x++) {
 		original->fds[x] = clone->fds[x];
+	}
 	/* Move the variables */
 	tmpv = original->varshead.first;
 	original->varshead.first = clone->varshead.first;
@@ -1931,6 +1936,9 @@ static int ast_do_masquerade(struct ast_channel *original)
 	original->callerid = clone->callerid;
 	clone->callerid = tmp;
 	
+	/* Restore original timing file descriptor */
+	original->fds[AST_MAX_FDS - 2] = original->timingfd;
+	
 	/* Our native formats are different now */
 	original->nativeformats = clone->nativeformats;
 
-- 
GitLab