Fix a crash when opening two terminal windows and closing the first one.

To reproduce, launch the terminal, open a second window using Ctrl-Shift-N,
go back to the first window, and press Ctrl-D. The terminal's master FD gets
events even after being closed, causing terminal_destroy to be called twice
on the same object.

To fix this, I'm adding a function to stop watching an FD.
This commit is contained in:
Dima Ryazanov 2012-11-29 00:27:09 -08:00 committed by Kristian Høgsberg
parent b4dc3f0bc4
commit aeb10f8522
3 changed files with 13 additions and 2 deletions

View File

@ -2578,13 +2578,15 @@ terminal_create(struct display *display)
static void
terminal_destroy(struct terminal *terminal)
{
display_unwatch_fd(terminal->display, terminal->master);
window_destroy(terminal->window);
close(terminal->master);
wl_list_remove(&terminal->link);
free(terminal);
if (wl_list_empty(&terminal_list))
exit(0);
display_exit(terminal->display);
free(terminal);
}
static void

View File

@ -4122,6 +4122,12 @@ display_watch_fd(struct display *display,
epoll_ctl(display->epoll_fd, EPOLL_CTL_ADD, fd, &ep);
}
void
display_unwatch_fd(struct display *display, int fd)
{
epoll_ctl(display->epoll_fd, EPOLL_CTL_DEL, fd, NULL);
}
void
display_run(struct display *display)
{

View File

@ -146,6 +146,9 @@ void
display_watch_fd(struct display *display,
int fd, uint32_t events, struct task *task);
void
display_unwatch_fd(struct display *display, int fd);
void
display_run(struct display *d);