|
|
|
@ -4533,9 +4533,10 @@ OpenGL drivers.
|
|
|
|
|
The kqueue syscall is broken in all known versions - most versions support
|
|
|
|
|
only sockets, many support pipes.
|
|
|
|
|
|
|
|
|
|
Libev tries to work around this by not using C<kqueue> by default on
|
|
|
|
|
this rotten platform, but of course you can still ask for it when creating
|
|
|
|
|
a loop.
|
|
|
|
|
Libev tries to work around this by not using C<kqueue> by default on this
|
|
|
|
|
rotten platform, but of course you can still ask for it when creating a
|
|
|
|
|
loop - embedding a socket-only kqueue loop into a select-based one is
|
|
|
|
|
probably going to work well.
|
|
|
|
|
|
|
|
|
|
=head3 C<poll> is buggy
|
|
|
|
|
|
|
|
|
@ -4564,19 +4565,21 @@ work on OS/X.
|
|
|
|
|
|
|
|
|
|
The default compile environment on Solaris is unfortunately so
|
|
|
|
|
thread-unsafe that you can't even use components/libraries compiled
|
|
|
|
|
without C<-D_REENTRANT> (as long as they use C<errno>), which, of course,
|
|
|
|
|
isn't defined by default.
|
|
|
|
|
without C<-D_REENTRANT> in a threaded program, which, of course, isn't
|
|
|
|
|
defined by default. A valid, if stupid, implementation choice.
|
|
|
|
|
|
|
|
|
|
If you want to use libev in threaded environments you have to make sure
|
|
|
|
|
it's compiled with C<_REENTRANT> defined.
|
|
|
|
|
|
|
|
|
|
=head3 Event port backend
|
|
|
|
|
|
|
|
|
|
The scalable event interface for Solaris is called "event ports". Unfortunately,
|
|
|
|
|
this mechanism is very buggy. If you run into high CPU usage, your program
|
|
|
|
|
freezes or you get a large number of spurious wakeups, make sure you have
|
|
|
|
|
all the relevant and latest kernel patches applied. No, I don't know which
|
|
|
|
|
ones, but there are multiple ones.
|
|
|
|
|
The scalable event interface for Solaris is called "event
|
|
|
|
|
ports". Unfortunately, this mechanism is very buggy in all major
|
|
|
|
|
releases. If you run into high CPU usage, your program freezes or you get
|
|
|
|
|
a large number of spurious wakeups, make sure you have all the relevant
|
|
|
|
|
and latest kernel patches applied. No, I don't know which ones, but there
|
|
|
|
|
are multiple ones to apply, and afterwards, event ports actually work
|
|
|
|
|
great.
|
|
|
|
|
|
|
|
|
|
If you can't get it to work, you can try running the program by setting
|
|
|
|
|
the environment variable C<LIBEV_FLAGS=3> to only allow C<poll> and
|
|
|
|
@ -4587,7 +4590,7 @@ C<select> backends.
|
|
|
|
|
AIX unfortunately has a broken C<poll.h> header. Libev works around
|
|
|
|
|
this by trying to avoid the poll backend altogether (i.e. it's not even
|
|
|
|
|
compiled in), which normally isn't a big problem as C<select> works fine
|
|
|
|
|
with large bitsets, and AIX is dead anyway.
|
|
|
|
|
with large bitsets on AIX, and AIX is dead anyway.
|
|
|
|
|
|
|
|
|
|
=head2 WIN32 PLATFORM LIMITATIONS AND WORKAROUNDS
|
|
|
|
|
|
|
|
|
|