summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIskren Chernev <iskren.chernev@gmail.com>2011-03-13 21:05:14 +0200
committerIskren Chernev <iskren.chernev@gmail.com>2011-03-14 11:55:06 +0200
commit1081bca2a802ef49d0f52d5613c50b016e0136cd (patch)
tree1c981d78cb7cbc4aa9e09c863c2f68387354c75d
parent61ce8749a7e78a2b6bfc60fcc21c53b8c40b898b (diff)
Close timer file descriptors in event loop on remove and failure.
When the timer is removed the corresponding fd is closed. This should automatically remove it from the epoll set.
-rw-r--r--wayland/event-loop.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/wayland/event-loop.c b/wayland/event-loop.c
index f05dd5b..afdb1d8 100644
--- a/wayland/event-loop.c
+++ b/wayland/event-loop.c
@@ -171,13 +171,10 @@ wl_event_source_timer_remove(struct wl_event_source *source)
{
struct wl_event_source_timer *timer_source =
(struct wl_event_source_timer *) source;
- struct wl_event_loop *loop = source->loop;
- int fd;
- fd = timer_source->fd;
+ close(timer_source->fd);
free(source);
-
- return epoll_ctl(loop->epoll_fd, EPOLL_CTL_DEL, fd, NULL);
+ return 0;
}
struct wl_event_source_interface timer_source_interface = {
@@ -215,6 +212,7 @@ wl_event_loop_add_timer(struct wl_event_loop *loop,
ep.data.ptr = source;
if (epoll_ctl(loop->epoll_fd, EPOLL_CTL_ADD, source->fd, &ep) < 0) {
+ close(source->fd);
free(source);
return NULL;
}