Fixed a bug where http manager sessions prevented the eventq from being cleaned out because http manager sessions do not have a valid file descriptor.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@82887 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Doug Bailey 18 years ago
parent 4668601f9c
commit 33a1011c51

@ -1976,20 +1976,26 @@ static int process_events(struct mansession *s)
struct eventqent *eqe; struct eventqent *eqe;
int ret = 0; int ret = 0;
ast_mutex_lock(&s->__lock); ast_mutex_lock(&s->__lock);
if (s->fd > -1) {
if (!s->eventq) if (!s->eventq)
s->eventq = master_eventq; s->eventq = master_eventq;
while(s->eventq->next) { while(s->eventq->next) {
eqe = s->eventq->next; eqe = s->eventq->next;
if ((s->authenticated && (s->readperm & eqe->category) == eqe->category) && if ((s->authenticated && (s->readperm & eqe->category) == eqe->category) &&
((s->send_events & eqe->category) == eqe->category)) { ((s->send_events & eqe->category) == eqe->category)) {
if (s->fd > -1) {
if (!ret && ast_carefulwrite(s->fd, eqe->eventdata, strlen(eqe->eventdata), s->writetimeout) < 0) if (!ret && ast_carefulwrite(s->fd, eqe->eventdata, strlen(eqe->eventdata), s->writetimeout) < 0)
ret = -1; ret = -1;
} else {
if (!s->outputstr && !(s->outputstr = ast_calloc(1, sizeof(*s->outputstr)))) {
ast_mutex_unlock(&s->__lock);
return;
}
ast_dynamic_str_append(&s->outputstr, 0, "%s", buf->str);
}
} }
unuse_eventqent(s->eventq); unuse_eventqent(s->eventq);
s->eventq = eqe; s->eventq = eqe;
} }
}
ast_mutex_unlock(&s->__lock); ast_mutex_unlock(&s->__lock);
return ret; return ret;
} }

Loading…
Cancel
Save