| Commit message (Collapse) | Author | Files | Lines |
|
|
|
Add the debug-only flag "virgin" which gets checked by assert()
calls. Fixes assertion failures when using zeroconf/avahi.
|
|
Add a flag that indicates whether the EventLoop is currently "busy".
As long as that flag is set, it does not need to be woken up - we can
simply add the DeferredMonitor to the list, and it will be caught by
EventLoop very soon. This eliminates nearly all of the
DeferredMonitor overhead when compared to IdleMonitor, rendering
IdleMonitor mostly obsolete.
|
|
Improved support for added events.
|
|
|
|
|
|
Now that the remaining known bugs in poll() implementation are fixed,
we can go on without the GLib implementation.
|
|
|
|
Instead of creating a new eventfd for each DeferredMonitor instance,
reuse EventLoop's eventfd, and add a std::list to EventLoop that
manages the list of pending DeferredMonitors. This std::list is
protected by the same mutex as the "calls" list.
The bottom line is: reduced overhead because the per-instance eventfd
was eliminated, slightly added overhead due to Mutex usage (but
negligible), and we're thread-safe now.
This subsystem is now good enough to replace EventLoop::AddCall().
|
|
|
|
|
|
This change adds two configuration options:
--with-eventloop=[glib|internal|auto]
--with-pollmethod=[epoll|auto]
First allows switching between GLib event loop and internal one.
Second chooses backend to use for internal event loop.
Conditional compilation symbols are changed accordingly.
Additional helper macro MPD_OPTIONAL_FUNC_NODEF is added as well.
|
|
|
|
|
|
|
|
Implement an event loop without GLib.
|
|
Remove a GLib dependencies from class EventLoop and DatabaseLock.
|
|
Track which thread runs the EventLoop and provide a check whether
we're currently inside.
|
|
Prepare for adding more code.
|
|
|
|
|
|
|