X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Fpoll.h;h=cfde4fc8381d36786f23683de1ffa7cc3f9e40f8;hp=6dca76d81827324f3767efc90bd06948a7b22fba;hb=b3066218aa8de35a47303bb198e62af43ca4d720;hpb=990570edd474b304d4c935d82be6201d872025e4 diff --git a/src/common/compat/poll.h b/src/common/compat/poll.h index 6dca76d81..cfde4fc83 100644 --- a/src/common/compat/poll.h +++ b/src/common/compat/poll.h @@ -1,18 +1,18 @@ /* * Copyright (C) 2011 - David Goulet * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; only version 2 of the License. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2 only, + * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _LTT_POLL_H @@ -42,7 +42,9 @@ extern unsigned int poll_max_size; */ static inline void __lttng_poll_free(void *events) { - free(events); + if (events) { + free(events); + } } /* @@ -50,6 +52,7 @@ static inline void __lttng_poll_free(void *events) */ #ifdef HAVE_EPOLL #include +#include /* See man epoll(7) for this define path */ #define COMPAT_EPOLL_PROC_PATH "/proc/sys/fs/epoll/max_user_watches" @@ -95,7 +98,7 @@ struct compat_epoll_event { extern int compat_epoll_create(struct lttng_poll_event *events, int size, int flags); #define lttng_poll_create(events, size, flags) \ - compat_epoll_create(events, size, flags); + compat_epoll_create(events, size, flags) /* * Wait on epoll set with the number of fd registered to the lttng_poll_event @@ -103,7 +106,7 @@ extern int compat_epoll_create(struct lttng_poll_event *events, */ extern int compat_epoll_wait(struct lttng_poll_event *events, int timeout); #define lttng_poll_wait(events, timeout) \ - compat_epoll_wait(events, timeout); + compat_epoll_wait(events, timeout) /* * Add a fd to the epoll set and resize the epoll_event structure if needed. @@ -111,21 +114,21 @@ extern int compat_epoll_wait(struct lttng_poll_event *events, int timeout); extern int compat_epoll_add(struct lttng_poll_event *events, int fd, uint32_t req_events); #define lttng_poll_add(events, fd, req_events) \ - compat_epoll_add(events, fd, req_events); + compat_epoll_add(events, fd, req_events) /* * Remove a fd from the epoll set. */ extern int compat_epoll_del(struct lttng_poll_event *events, int fd); #define lttng_poll_del(events, fd) \ - compat_epoll_del(events, fd); + compat_epoll_del(events, fd) /* * Set up the poll set limits variable poll_max_size */ extern void compat_epoll_set_max_size(void); -#define lttng_poll_set_max_size(void) \ - compat_epoll_set_max_size(void); +#define lttng_poll_set_max_size() \ + compat_epoll_set_max_size() /* * This function memset with zero the structure since it can be reused at each @@ -146,8 +149,13 @@ static inline void lttng_poll_reset(struct lttng_poll_event *events) */ static inline void lttng_poll_clean(struct lttng_poll_event *events) { + int ret; + if (events) { - close(events->epfd); + ret = close(events->epfd); + if (ret) { + perror("close"); + } __lttng_poll_free((void *) events->events); } } @@ -179,10 +187,17 @@ enum { LPOLLRDBAND = POLLRDBAND, LPOLLWRNORM = POLLWRNORM, LPOLLWRBAND = POLLWRBAND, +#if __linux__ LPOLLMSG = POLLMSG, + LPOLLRDHUP = POLLRDHUP, +#elif (defined(__FreeBSD__) || defined(__CYGWIN__)) + LPOLLMSG = 0, + LPOLLRDHUP = 0, +#else +#error "Please add support for your OS." +#endif /* __linux__ */ LPOLLERR = POLLERR, LPOLLHUP = POLLHUP | POLLNVAL, - LPOLLRDHUP = POLLRDHUP, /* Close on exec feature does not exist for poll(2) */ LTTNG_CLOEXEC = 0xdead, }; @@ -208,7 +223,7 @@ struct compat_poll_event { */ extern int compat_poll_create(struct lttng_poll_event *events, int size); #define lttng_poll_create(events, size, flags) \ - compat_poll_create(events, size); + compat_poll_create(events, size) /* * Wait on poll(2) event with nb_fd registered to the lttng_poll_event data @@ -216,7 +231,7 @@ extern int compat_poll_create(struct lttng_poll_event *events, int size); */ extern int compat_poll_wait(struct lttng_poll_event *events, int timeout); #define lttng_poll_wait(events, timeout) \ - compat_poll_wait(events, timeout); + compat_poll_wait(events, timeout) /* * Add the fd to the pollfd structure. Resize if needed. @@ -224,7 +239,7 @@ extern int compat_poll_wait(struct lttng_poll_event *events, int timeout); extern int compat_poll_add(struct lttng_poll_event *events, int fd, uint32_t req_events); #define lttng_poll_add(events, fd, req_events) \ - compat_poll_add(events, fd, req_events); + compat_poll_add(events, fd, req_events) /* * Remove the fd from the pollfd. Memory allocation is done to recreate a new @@ -233,14 +248,14 @@ extern int compat_poll_add(struct lttng_poll_event *events, */ extern int compat_poll_del(struct lttng_poll_event *events, int fd); #define lttng_poll_del(events, fd) \ - compat_poll_del(events, fd); + compat_poll_del(events, fd) /* * Set up the poll set limits variable poll_max_size */ extern void compat_poll_set_max_size(void); -#define lttng_poll_set_max_size(void) \ - compat_poll_set_max_size(void); +#define lttng_poll_set_max_size() \ + compat_poll_set_max_size() /* * No need to reset a pollfd structure for poll(2)