Copy event pointer out of event hash table before callbacks, because it might be deleted

This commit is contained in:
Neil Cook 2016-12-16 10:36:21 +00:00
parent 5e26137eda
commit 7ebf3924b5
1 changed files with 9 additions and 10 deletions

View File

@ -304,17 +304,16 @@ default_eventloop_run_once(getdns_eventloop *loop, int blocking)
for (i = 0; i < num_pfds; i++) { for (i = 0; i < num_pfds; i++) {
int fd = pfds[i].fd; int fd = pfds[i].fd;
_getdns_eventloop_info* fd_event = find_event(&default_loop->fd_events, fd); _getdns_eventloop_info* fd_event = find_event(&default_loop->fd_events, fd);
if (fd_event && if (fd_event && fd_event->event) {
fd_event->event && getdns_eventloop_event* event = fd_event->event;
fd_event->event->read_cb && if (event->read_cb &&
(pfds[i].revents & POLLIN)) (pfds[i].revents & POLLIN))
default_read_cb(fd, fd_event->event); default_read_cb(fd, event);
if (fd_event && if (event->write_cb &&
fd_event->event &&
fd_event->event->write_cb &&
(pfds[i].revents & POLLOUT)) (pfds[i].revents & POLLOUT))
default_write_cb(fd, fd_event->event); default_write_cb(fd, event);
}
} }
if (pfds) if (pfds)
free(pfds); free(pfds);