[BACK]Return to DESCR CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / pkgsrc / devel / libepoll-shim

File: [cvs.NetBSD.org] / pkgsrc / devel / libepoll-shim / DESCR (download)

Revision 1.1, Mon May 3 17:17:17 2021 UTC (18 months, 3 weeks ago) by jdolecek
Branch: MAIN
CVS Tags: pkgsrc-2022Q2-base, pkgsrc-2022Q2, pkgsrc-2022Q1-base, pkgsrc-2022Q1, pkgsrc-2021Q4-base, pkgsrc-2021Q4, pkgsrc-2021Q3-base, pkgsrc-2021Q3, pkgsrc-2021Q2-base, pkgsrc-2021Q2

add libepoll-shim 0.0.20210418 small library that implements epoll with kqueue

will be used for net/xfreerdp2

This is a small library that implements epoll on top of kqueue. It
has been successfully used to port libinput, libevdev, Wayland and
more software to FreeBSD: https://www.freshports.org/devel/libepoll-shim/

It may be useful for porting other software that uses epoll as well.

The library provides implementation of Linux timerfd_create(2) related
APIs, eventfd(2), signalfd(2).

However, this library contains some very ugly hacks and workarounds.
For example:

- When using timerfd, signalfd or eventfd, the system calls read,
  write and close are redefined as macros to internal helper
  functions.  This is needed as there is some internal context that
  has to be free'd properly. This means that you shouldn't create
  a timerfd/signalfd in one part of a program and close it in a
  different part where sys/timerfd.h isn't included. The context
  would leak. Luckily, software such as libinput behaves very nicely
  and puts all timerfd related code in a single source file.

- There is limited support for file descriptors that lack support
  for kqueue but are supported by poll(2). This includes graphics
  or sound devices under /dev. Those descriptors are handled in an
  outer poll(2) loop. Edge triggering using EPOLLET will not work.

- Shimmed file descriptors cannot be shared between processes. On
  fork() those fds are closed. When trying to pass a shimmed fd to
  another process the sendmsg call will return EOPNOTSUPP. In most
  cases sharing epoll/timerfd/signalfd is a bad idea anyway, but
  there are some legitimate use cases (for example sharing semaphore
  eventfds, issue #23). When the OS natively supports eventfds (as
  is the case for FreeBSD >= 13) this library won't provide eventfd
  shims or the sys/eventfd.h header.

- There is no proper notification mechanism for changes to the
  system CLOCK_REALTIME clock on BSD systems. Also, kevent
  EVFILT_TIMERs use the system monotonic clock as reference.
  Therefore, in order to implement absolute (TFD_TIMER_ABSTIME)
  CLOCK_REALTIME timerfds or cancellation support
  (TFD_TIMER_CANCEL_ON_SET), a thread is spawned that periodically
  polls the system boot time for changes to the realtime clock.

The following operating systems are supported:

FreeBSD >= 11.4, >= 12.2, >= 13.0
NetBSD >= 9.1
OpenBSD >= 6.7