X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Fpoll.h;h=4b2fc5036843c5863047125a8c1d79085405b34f;hb=bbbfd84979130a11aebf172cf7d0d24e28165258;hp=9f59d35c3c84faf821f1237416d743f1412bb2e1;hpb=6f04ed72990f6c72d16fd08d39feac0967da732e;p=lttng-tools.git diff --git a/src/common/compat/poll.h b/src/common/compat/poll.h index 9f59d35c3..4b2fc5036 100644 --- a/src/common/compat/poll.h +++ b/src/common/compat/poll.h @@ -73,7 +73,7 @@ enum { LPOLLNVAL = EPOLLHUP, LPOLLRDHUP = EPOLLRDHUP, /* Close on exec feature of epoll */ -#if __GLIBC_PREREQ(2, 9) +#if defined(HAVE_EPOLL_CREATE1) && defined(EPOLL_CLOEXEC) LTTNG_CLOEXEC = EPOLL_CLOEXEC, #else /* @@ -119,15 +119,13 @@ static inline int __lttng_epoll_get_prev_fd(struct lttng_poll_event *events, #define LTTNG_POLL_GET_PREV_FD(e, i, nb_fd) \ __lttng_epoll_get_prev_fd(LTTNG_REF(e), i, nb_fd) -/* - * Create the epoll set. No memory allocation is done here. - */ +/* Create the epoll set. */ 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) -#if __GLIBC_PREREQ(2, 9) +#if defined(HAVE_EPOLL_CREATE1) && defined(EPOLL_CLOEXEC) static inline int compat_glibc_epoll_create(int size __attribute__((unused)), int flags) { @@ -171,10 +169,18 @@ extern int compat_epoll_del(struct lttng_poll_event *events, int fd); #define lttng_poll_del(events, fd) \ compat_epoll_del(events, fd) +/* + * Modify an fd's events in the epoll set. + */ +extern int compat_epoll_mod(struct lttng_poll_event *events, + int fd, uint32_t req_events); +#define lttng_poll_mod(events, fd, req_events) \ + compat_epoll_mod(events, fd, req_events) + /* * Set up the poll set limits variable poll_max_size */ -extern void compat_epoll_set_max_size(void); +extern int compat_epoll_set_max_size(void); #define lttng_poll_set_max_size() \ compat_epoll_set_max_size() @@ -254,7 +260,7 @@ enum { #if __linux__ LPOLLMSG = POLLMSG, LPOLLRDHUP = POLLRDHUP, -#elif (defined(__FreeBSD__) || defined(__CYGWIN__)) +#elif (defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__sun__) || defined(__APPLE__)) LPOLLMSG = 0, LPOLLRDHUP = 0, #else @@ -285,8 +291,7 @@ struct compat_poll_event { * execution before a poll wait is done. */ struct compat_poll_event_array current; - /* Indicate if wait.events needs to be realloc. */ - int need_realloc:1; + /* Indicate if wait.events need to be updated from current. */ int need_update:1; }; @@ -308,10 +313,12 @@ static inline int __lttng_poll_get_prev_fd(struct lttng_poll_event *events, /* * For the following calls, consider 'e' to be a lttng_poll_event pointer and i * being the index of the events array. + * LTTNG_POLL_GETNB is always used after lttng_poll_wait, thus we can use the + * current list for test compatibility purposes. */ #define LTTNG_POLL_GETFD(e, i) LTTNG_REF(e)->wait.events[i].fd #define LTTNG_POLL_GETEV(e, i) LTTNG_REF(e)->wait.events[i].revents -#define LTTNG_POLL_GETNB(e) LTTNG_REF(e)->wait.nb_fd +#define LTTNG_POLL_GETNB(e) LTTNG_REF(e)->current.nb_fd #define LTTNG_POLL_GETSZ(e) LTTNG_REF(e)->wait.events_size #define LTTNG_POLL_GET_PREV_FD(e, i, nb_fd) \ __lttng_poll_get_prev_fd(LTTNG_REF(e), i, nb_fd) @@ -348,10 +355,18 @@ extern int compat_poll_del(struct lttng_poll_event *events, int fd); #define lttng_poll_del(events, fd) \ compat_poll_del(events, fd) +/* + * Modify an fd's events in the poll set. + */ +extern int compat_poll_mod(struct lttng_poll_event *events, + int fd, uint32_t req_events); +#define lttng_poll_mod(events, fd, req_events) \ + compat_poll_mod(events, fd, req_events) + /* * Set up the poll set limits variable poll_max_size */ -extern void compat_poll_set_max_size(void); +extern int compat_poll_set_max_size(void); #define lttng_poll_set_max_size() \ compat_poll_set_max_size()