Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | event/DeferredMonitor: include cleanup | Max Kellermann | 2014-11-25 | 1 | -3/+0 |
| | |||||
* | Merge tag 'v0.18.18' into v0.19.x | Max Kellermann | 2014-11-18 | 1 | -1/+1 |
|\ | |||||
| * | event/ServerSocket: fix get_remote_uid() error value | Max Kellermann | 2014-11-18 | 1 | -1/+1 |
| | | | | | | | | Must return -1 on error, not 0. 0 is root. | ||||
* | | event/IdleMonitor: remove redundant comment | Max Kellermann | 2014-10-10 | 1 | -2/+1 |
| | | |||||
* | | Merge branch 'v0.18.x' | Max Kellermann | 2014-08-24 | 1 | -1/+1 |
|\| | |||||
| * | event/TimeoutMonitor: really reset "active" flag before invoking OnTimeout() | Max Kellermann | 2014-08-24 | 1 | -1/+1 |
| | | | | | | | | The previous commit was broken. D'oh! | ||||
* | | Merge branch 'v0.18.x' | Max Kellermann | 2014-08-24 | 1 | -0/+1 |
|\| | |||||
| * | event/TimeoutMonitor: reset "active" flag before invoking OnTimeout() | Max Kellermann | 2014-08-24 | 1 | -1/+3 |
| | | | | | | | | | | | | The IsActive() method returned true even if the timer was not active, after it completed once. This broke the state file timer, and the state file was not saved periodically. | ||||
| * | event/BufferedSocket: fix inversed buffer check | Max Kellermann | 2014-08-07 | 1 | -1/+1 |
| | | | | | | | | | | This was broken by commit 84d20d9e, which deleted the "!" from the check. | ||||
| * | DeferredMonitor: fix race condition when using GLib event loop | Max Kellermann | 2014-04-26 | 2 | -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. | ||||
| * | event/SignalMonitor: fix build failure due to missing signal.h include | Max Kellermann | 2014-03-02 | 1 | -0/+2 |
| | | |||||
* | | event/BufferedSocket: fix inversed buffer check | Max Kellermann | 2014-08-07 | 1 | -1/+1 |
| | | | | | | | | | | This was broken by commit 84d20d9e, which deleted the "!" from the check. | ||||
* | | util/FifoBuffer: rename to StaticFifoBuffer | Max Kellermann | 2014-08-06 | 1 | -2/+2 |
| | | |||||
* | | configure.ac: always define _GNU_SOURCE on Linux | Max Kellermann | 2014-03-15 | 1 | -5/+0 |
| | | | | | | | | Make sure glibc gives us all features. | ||||
* | | Merge branch 'v0.18.x' | Max Kellermann | 2014-02-18 | 1 | -1/+22 |
|\| | |||||
| * | event/SignalMonitor: unblock signals after fork | Max Kellermann | 2014-02-18 | 1 | -1/+22 |
| | | | | | | | | Fixes hanging child process in the "pipe" output plugin. | ||||
* | | event/Loop: remove the dummy constructor argument | Max Kellermann | 2014-02-05 | 2 | -4/+2 |
| | | |||||
* | | copyright year 2014 | Max Kellermann | 2014-01-13 | 30 | -30/+30 |
| | | |||||
* | | event/Loop: allow AddTimer() after Run() has returned | Max Kellermann | 2014-01-09 | 1 | -1/+3 |
| | | | | | | | | Kludge for libavahi-client quirk. | ||||
* | | event/Loop: allow scheduling events before Run() | Max Kellermann | 2014-01-09 | 3 | -5/+29 |
| | | | | | | | | | | Add the debug-only flag "virgin" which gets checked by assert() calls. Fixes assertion failures when using zeroconf/avahi. | ||||
* | | util/Alloc: new library replacing GLib's g_malloc() | Max Kellermann | 2014-01-07 | 1 | -4/+3 |
| | | |||||
* | | event/Loop: cancel the WakeFD monitor in destructor | Max Kellermann | 2014-01-06 | 1 | -0/+4 |
| | | |||||
* | | event/MultiSocketMonitor: add method ClearSocketList() | Max Kellermann | 2014-01-06 | 2 | -0/+14 |
| | | |||||
* | | event/SocketMonitor: don't close the socket automatically | Max Kellermann | 2014-01-06 | 6 | -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. | ||||
* | | event/IdleMonitor: cancel in destructor only if active | Max Kellermann | 2014-01-06 | 1 | -1/+6 |
| | | | | | | | | Debug-mode workaround for bogus assertion failure. | ||||
* | | event/MultiSocketMonitor: API documentation | Max Kellermann | 2014-01-06 | 1 | -0/+10 |
| | | |||||
* | | event/Loop: try to avoid the WakeFD when adding DeferredMonitor | Max Kellermann | 2014-01-05 | 2 | -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. | ||||
* | | event/Loop: combine multiple WakeFD::Write() calls | Max Kellermann | 2014-01-05 | 1 | -1/+6 |
| | | | | | | | | Reduce DeferredMonitor overhead. | ||||
* | | event/Loop: add attribute "again" | Max Kellermann | 2014-01-05 | 2 | -2/+10 |
| | | | | | | | | Improved support for added events. | ||||
* | | event/Loop: add thread-safety assertions | Max Kellermann | 2014-01-05 | 3 | -1/+30 |
| | | |||||
* | | event/Loop: remove obsolete assertion | Max Kellermann | 2014-01-05 | 1 | -2/+0 |
| | | |||||
* | | event/Loop: move code to HandleDeferred() | Max Kellermann | 2014-01-05 | 2 | -8/+19 |
| | | |||||
* | | event/MultiSocketMonitor: add missing <algorithm> include | Max Kellermann | 2014-01-05 | 1 | -0/+2 |
| | | | | | | | | For std::find_if(). | ||||
* | | event/MultiSocketMonitor: add method ReplaceSocketList() | Max Kellermann | 2014-01-05 | 2 | -0/+42 |
| | | | | | | Move code from AlsaMixerPlugin. | ||||
* | | event/MultiSocketMonitor: include cleanup | Max Kellermann | 2014-01-05 | 2 | -8/+1 |
| | | |||||
* | | event/Loop: remove the GLib implementation | Max Kellermann | 2014-01-04 | 12 | -664/+3 |
| | | | | | | | | | | Now that the remaining known bugs in poll() implementation are fixed, we can go on without the GLib implementation. | ||||
* | | event/poll: eliminate one vector::size() call | Max Kellermann | 2014-01-04 | 1 | -2/+3 |
| | | |||||
* | | event/Loop: remove bogus "!quit" assertion | Max Kellermann | 2014-01-04 | 1 | -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. | ||||
* | | event/Loop: remove unused method AddCall() | Max Kellermann | 2014-01-04 | 2 | -28/+0 |
| | | |||||
* | | event/Loop: non-recursive Break() implementation | Max Kellermann | 2014-01-04 | 1 | -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. | ||||
* | | event/BlockingCall: always use DeferredMonitor internally | Max Kellermann | 2014-01-04 | 1 | -24/+0 |
| | | | | | | | | | | There is no advantage of using EventLoop::AddCall(), now that DeferredMonitor is thread-safe. | ||||
* | | event/DeferredMonitor: make fully thread-safe | Max Kellermann | 2014-01-04 | 4 | -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(). | ||||
* | | event/*Monitor: document as not being thread-safe | Max Kellermann | 2013-12-31 | 4 | -0/+15 |
| | | |||||
* | | event/Loop: document that AddCall() is thread-safe | Max Kellermann | 2013-12-31 | 1 | -0/+5 |
| | | |||||
* | | event/PollGroupPoll: include stddef.h instead of string.h | Max Kellermann | 2013-12-21 | 1 | -1/+2 |
| | | |||||
* | | util/fifo_buffer: remove obsolete library | Max Kellermann | 2013-12-19 | 1 | -1/+0 |
| | | |||||
* | | util/PeakBuffer: use IsEmpty() instead of IsNull() | Max Kellermann | 2013-12-19 | 1 | -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. | ||||
* | | util/PeakBuffer: use DynamicFifoBuffer instead of struct fifo_buffer | Max Kellermann | 2013-12-15 | 1 | -1/+0 |
| | | | | | | | | Switch to the C++ version. | ||||
* | | util/PeakBuffer: return ConstBuffer<void> | Max Kellermann | 2013-12-15 | 1 | -4/+3 |
| | | |||||
* | | configure.ac: add option "--disable-glib" | Max Kellermann | 2013-12-15 | 1 | -0/+1 |
| | | | | | | | | | | Allows building without GLib. This fails to compile currently, because GLib is still used in the MPD core. |