diff options
| author | Přemysl Janouch <p.janouch@gmail.com> | 2014-09-24 19:03:45 +0200 | 
|---|---|---|
| committer | Přemysl Janouch <p.janouch@gmail.com> | 2014-09-24 19:03:45 +0200 | 
| commit | 21cab71e75e7dd0f7d91e28e310e8b59af304aa6 (patch) | |
| tree | a3f2e4f19eba85ad2f6c4227505ef6109c71f7e7 | |
| parent | 89edba14f0dfb74f0694a20724405743ece00017 (diff) | |
| download | ponymap-21cab71e75e7dd0f7d91e28e310e8b59af304aa6.tar.gz ponymap-21cab71e75e7dd0f7d91e28e310e8b59af304aa6.tar.xz ponymap-21cab71e75e7dd0f7d91e28e310e8b59af304aa6.zip | |
Fix the epoll poller
Setting the fd to -1 broke poller_remove_from_dispatch().
| -rw-r--r-- | ponymap.c | 2 | ||||
| -rw-r--r-- | utils.c | 3 | 
2 files changed, 3 insertions, 2 deletions
| @@ -534,7 +534,7 @@ unit_abort (struct unit *u)  	poller_timer_reset (&u->timeout_event);  	// This way we avoid a syscall with epoll -	u->fd_event.fd = -1; +	u->fd_event.closed = true;  	poller_fd_reset (&u->fd_event);  	u->transport_data = NULL; @@ -873,6 +873,7 @@ struct poller_fd  	int fd;                             ///< Our file descriptor  	short events;                       ///< The poll() events we registered for +	bool closed;                        ///< Whether fd has been closed already  	poller_fd_fn dispatcher;            ///< Event dispatcher  	void *user_data;                    ///< User data @@ -1194,7 +1195,7 @@ poller_remove_at_index (struct poller *self, size_t index)  	fd->index = -1;  	poller_remove_from_dispatch (self, fd); -	if (fd->fd != -1) +	if (!fd->closed)  		hard_assert (epoll_ctl (self->epoll_fd,  			EPOLL_CTL_DEL, fd->fd, (void *) "") != -1); | 
