summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Spencer <markster@digium.com>2005-10-14 20:37:40 +0000
committerMark Spencer <markster@digium.com>2005-10-14 20:37:40 +0000
commit0aec4ef713376d2cbc8ea05ecc9ef641b958642e (patch)
tree575ad4dd3e4c239517c277db18a1aaf30ba8ebf6
parent141d9f7156c165e05ad9ec03e22ba2866bf6e3ce (diff)
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
-rwxr-xr-xmanager.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/manager.c b/manager.c
index 55120e966..bd99025a2 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;
}