From 0aec4ef713376d2cbc8ea05ecc9ef641b958642e Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Fri, 14 Oct 2005 20:37:40 +0000
Subject: [PATCH] Fix carefulwrite and its usage within manager (bug #5355,
 maybe)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6792 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 manager.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/manager.c b/manager.c
index 55120e9661..bd99025a2e 100755
--- a/manager.c
+++ b/manager.c
@@ -118,12 +118,15 @@ int ast_carefulwrite(int fd, char *s, int len, int timeoutms)
 		if (res < 0) res = 0;
 		len -= res;
 		s += res;
-		fds[0].fd = fd;
-		fds[0].events = POLLOUT;
-		/* Wait until writable again */
-		res = poll(fds, 1, timeoutms);
-		if (res < 1)
-			return -1;
+		res = 0;
+		if (len) {
+			fds[0].fd = fd;
+			fds[0].events = POLLOUT;
+			/* Wait until writable again */
+			res = poll(fds, 1, timeoutms);
+			if (res < 1)
+				return -1;
+		}
 	}
 	return res;
 }
@@ -1292,7 +1295,7 @@ static int process_message(struct mansession *s, struct message *m)
 		ast_mutex_lock(&s->__lock);
 		s->busy = 0;
 		while(s->eventq) {
-			if (ast_carefulwrite(s->fd, s->eventq->eventdata, strlen(s->eventq->eventdata), s->writetimeout)) {
+			if (ast_carefulwrite(s->fd, s->eventq->eventdata, strlen(s->eventq->eventdata), s->writetimeout) < 0) {
 				ret = -1;
 				break;
 			}
-- 
GitLab