aboutsummaryrefslogtreecommitdiffstats
path: root/src/event (unfollow)
Commit message (Collapse)AuthorFilesLines
2014-04-26DeferredMonitor: fix race condition when using GLib event loopMax Kellermann2-11/+22
Turns out the lock-free code using atomics was not thread-safe. The given callback could be invoked by GLib before the source_id attribute was assigned. This commit changes the DeferredMonitor class to use a Mutex to block the event loop until source_id is assigned. This bug does not exist in the 0.19 branch because it does not use the GLib main loop anymore.
2014-03-15configure.ac: always define _GNU_SOURCE on LinuxMax Kellermann1-5/+0
Make sure glibc gives us all features.
2014-03-02event/SignalMonitor: fix build failure due to missing signal.h includeMax Kellermann1-0/+2
2014-02-18event/SignalMonitor: unblock signals after forkMax Kellermann1-1/+22
Fixes hanging child process in the "pipe" output plugin.
2014-02-05event/Loop: remove the dummy constructor argumentMax Kellermann2-4/+2
2014-01-13copyright year 2014Max Kellermann30-30/+30
2014-01-09event/Loop: allow AddTimer() after Run() has returnedMax Kellermann1-1/+3
Kludge for libavahi-client quirk.
2014-01-09event/Loop: allow scheduling events before Run()Max Kellermann3-5/+29
Add the debug-only flag "virgin" which gets checked by assert() calls. Fixes assertion failures when using zeroconf/avahi.
2014-01-07util/Alloc: new library replacing GLib's g_malloc()Max Kellermann1-4/+3
2014-01-06event/Loop: cancel the WakeFD monitor in destructorMax Kellermann1-0/+4
2014-01-06event/MultiSocketMonitor: add method ClearSocketList()Max Kellermann2-0/+14
2014-01-06event/SocketMonitor: don't close the socket automaticallyMax Kellermann6-14/+8
Users now have to call Close() explicitly. This simplifies using the class, as most users have automatic socket management already, and Steal() had to be used often.
2014-01-06event/IdleMonitor: cancel in destructor only if activeMax Kellermann1-1/+6
Debug-mode workaround for bogus assertion failure.
2014-01-06event/MultiSocketMonitor: API documentationMax Kellermann1-0/+10
2014-01-05event/Loop: try to avoid the WakeFD when adding DeferredMonitorMax Kellermann2-2/+24
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.
2014-01-05event/Loop: combine multiple WakeFD::Write() callsMax Kellermann1-1/+6
Reduce DeferredMonitor overhead.
2014-01-05event/Loop: add attribute "again"Max Kellermann2-2/+10
Improved support for added events.
2014-01-05event/Loop: add thread-safety assertionsMax Kellermann3-1/+30
2014-01-05event/Loop: remove obsolete assertionMax Kellermann1-2/+0
2014-01-05event/Loop: move code to HandleDeferred()Max Kellermann2-8/+19
2014-01-05event/MultiSocketMonitor: add missing <algorithm> includeMax Kellermann1-0/+2
For std::find_if().
2014-01-05event/MultiSocketMonitor: add method ReplaceSocketList()Max Kellermann2-0/+42
Move code from AlsaMixerPlugin.
2014-01-05event/MultiSocketMonitor: include cleanupMax Kellermann2-8/+1
2014-01-04event/Loop: remove the GLib implementationMax Kellermann12-664/+3
Now that the remaining known bugs in poll() implementation are fixed, we can go on without the GLib implementation.
2014-01-04event/poll: eliminate one vector::size() callMax Kellermann1-2/+3
2014-01-04event/Loop: remove bogus "!quit" assertionMax Kellermann1-5/+3
Commit 1f11959 allowed modifying the "quit" attribute from any thread, and thus the assertion may fail spuriously. This assertion is too strict for the relaxed use of "quit". Let's remove it and move the "quit" check to before the SockedMonitor::Dispatch() call.
2014-01-04event/Loop: remove unused method AddCall()Max Kellermann2-28/+0
2014-01-04event/Loop: non-recursive Break() implementationMax Kellermann1-4/+2
Simply set the "quit" flag and wake up the thread. This works even if we're inside this thread. Setting "quit" to a new value without mutex protection is usually not safe, but good enough here.
2014-01-04event/BlockingCall: always use DeferredMonitor internallyMax Kellermann1-24/+0
There is no advantage of using EventLoop::AddCall(), now that DeferredMonitor is thread-safe.
2014-01-04event/DeferredMonitor: make fully thread-safeMax Kellermann4-54/+77
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().
2013-12-31event/*Monitor: document as not being thread-safeMax Kellermann4-0/+15
2013-12-31event/Loop: document that AddCall() is thread-safeMax Kellermann1-0/+5
2013-12-21event/PollGroupPoll: include stddef.h instead of string.hMax Kellermann1-1/+2
2013-12-19util/fifo_buffer: remove obsolete libraryMax Kellermann1-1/+0
2013-12-19util/PeakBuffer: use IsEmpty() instead of IsNull()Max Kellermann1-1/+1
The DynamicFifoBuffer methods never return nullptr when the buffer is empty or full; instead, they return an empty buffer. This bug caused an endless loop.
2013-12-15util/PeakBuffer: use DynamicFifoBuffer instead of struct fifo_bufferMax Kellermann1-1/+0
Switch to the C++ version.
2013-12-15util/PeakBuffer: return ConstBuffer<void>Max Kellermann1-4/+3
2013-12-15configure.ac: add option "--disable-glib"Max Kellermann1-0/+1
Allows building without GLib. This fails to compile currently, because GLib is still used in the MPD core.
2013-12-04system/Resolver: sockaddr_to_string() returns std::string()Max Kellermann1-22/+11
No GLib memory allocation.
2013-12-03PollGroupWinSelect: delete copy constructor and assignment operatorDenis Krjuchkov1-0/+2
2013-12-03PollGroupWinSelect: uninline constructor and destructorDenis Krjuchkov2-2/+5
2013-12-02event: add poll() based PollGroup implementationDenis Krjuchkov3-0/+156
2013-11-29PollGroupEPoll.hxx: add const modifiers where applicableDenis Krjuchkov1-2/+2
2013-11-29event: implement PollGroup based on Windows selectDenis Krjuchkov4-0/+330
2013-11-28event: introduce generic API for internal event loopDenis Krjuchkov6-55/+147
2013-11-28include cleanup using iwyuMax Kellermann9-3/+11
2013-11-27Add infrastructure for using multiple event loopsDenis Krjuchkov13-113/+215
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.
2013-11-24event: add API documentationMax Kellermann5-1/+38
2013-11-24event/SocketMonitor: add missing spaceMax Kellermann2-4/+4
2013-11-06event/FullyBufferedSocket: remove obsolete TODO commentMax Kellermann1-16/+0
We have a better solution now.