Max Kellermann
7c15e41da5
event/MultiSocketMonitor: add missing <algorithm> include
...
For std::find_if().
2014-01-05 01:35:12 +01:00
Max Kellermann
7b540f0226
event/MultiSocketMonitor: add method ReplaceSocketList()
...
Move code from AlsaMixerPlugin.
2014-01-05 01:28:36 +01:00
Max Kellermann
e29c22e662
event/MultiSocketMonitor: include cleanup
2014-01-05 00:39:29 +01:00
Max Kellermann
f0d3b47ad8
event/Loop: remove the GLib implementation
...
Now that the remaining known bugs in poll() implementation are fixed,
we can go on without the GLib implementation.
2014-01-04 19:31:23 +01:00
Max Kellermann
880bf17dae
event/poll: eliminate one vector::size() call
2014-01-04 19:10:21 +01:00
Max Kellermann
19424e95db
event/Loop: remove bogus "!quit" assertion
...
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-04 17:06:05 +01:00
Max Kellermann
0f9ef2506f
event/Loop: remove unused method AddCall()
2014-01-04 16:00:45 +01:00
Max Kellermann
1f1195975f
event/Loop: non-recursive Break() implementation
...
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-04 15:59:00 +01:00
Max Kellermann
d2a4f64fd6
event/BlockingCall: always use DeferredMonitor internally
...
There is no advantage of using EventLoop::AddCall(), now that
DeferredMonitor is thread-safe.
2014-01-04 15:58:59 +01:00
Max Kellermann
a357d84dce
event/DeferredMonitor: make fully thread-safe
...
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().
2014-01-04 15:58:59 +01:00
Max Kellermann
e73d0df2b6
event/*Monitor: document as not being thread-safe
2013-12-31 15:59:41 +01:00
Max Kellermann
af3f483924
event/Loop: document that AddCall() is thread-safe
2013-12-31 15:31:59 +01:00
Max Kellermann
6416198e9f
event/PollGroupPoll: include stddef.h instead of string.h
2013-12-21 21:21:25 +01:00
Max Kellermann
d86cd4e4b4
util/fifo_buffer: remove obsolete library
2013-12-19 12:17:09 +01:00
Max Kellermann
52dca859c7
util/PeakBuffer: use IsEmpty() instead of IsNull()
...
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-19 10:30:26 +01:00
Max Kellermann
ecdebb315f
util/PeakBuffer: use DynamicFifoBuffer instead of struct fifo_buffer
...
Switch to the C++ version.
2013-12-15 23:07:08 +01:00
Max Kellermann
1f523be72d
util/PeakBuffer: return ConstBuffer<void>
2013-12-15 23:07:08 +01:00
Max Kellermann
d5dfe7d457
configure.ac: add option "--disable-glib"
...
Allows building without GLib. This fails to compile currently,
because GLib is still used in the MPD core.
2013-12-15 18:43:12 +01:00
Max Kellermann
e1901e97c2
system/Resolver: sockaddr_to_string() returns std::string()
...
No GLib memory allocation.
2013-12-04 08:43:55 +01:00
Denis Krjuchkov
07352e82f1
PollGroupWinSelect: delete copy constructor and assignment operator
2013-12-03 11:43:26 +06:00
Denis Krjuchkov
1003cc9bf9
PollGroupWinSelect: uninline constructor and destructor
2013-12-03 11:41:36 +06:00
Denis Krjuchkov
1df426aa5c
event: add poll() based PollGroup implementation
2013-12-02 14:39:52 +06:00
Denis Krjuchkov
71bc15aca1
PollGroupEPoll.hxx: add const modifiers where applicable
2013-11-29 15:26:57 +06:00
Denis Krjuchkov
cfdd5edc49
event: implement PollGroup based on Windows select
2013-11-29 15:05:01 +06:00
Denis Krjuchkov
bb288f0284
event: introduce generic API for internal event loop
2013-11-28 17:06:16 +06:00
Max Kellermann
f90abe9530
include cleanup using iwyu
2013-11-28 11:50:54 +01:00
Denis Krjuchkov
46bab7e4b9
Add infrastructure for using multiple event loops
...
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-27 17:28:36 +06:00
Max Kellermann
e53a25cbae
event: add API documentation
2013-11-24 19:28:04 +01:00
Max Kellermann
41e7145973
event/SocketMonitor: add missing space
2013-11-24 16:07:12 +01:00
Max Kellermann
5c18e4f114
event/FullyBufferedSocket: remove obsolete TODO comment
...
We have a better solution now.
2013-11-06 23:50:36 +01:00
Max Kellermann
422b8472fe
event/FullyBufferedSocket: try to write without extra roundtrip
...
Postpone the write using IdleMonitor instead of scheduling a write
event. This reduces the number of system calls, because we don't need
to register and unregister the write event in epoll.
2013-11-06 21:52:24 +01:00
Max Kellermann
5b213b0504
event/FullyBufferedSocket: make WriteFromBuffer() protected
...
.. and rename it to Flush().
2013-11-06 21:52:09 +01:00
Max Kellermann
154bdf0bca
event/SocketMonitor: add method Abandon()
2013-11-06 19:05:45 +01:00
Max Kellermann
7bca61f5bb
event/ServerSocket: don't abort if IPv6 is not available
...
First check if an IPv6 socket can be created.
2013-11-04 23:36:02 +01:00
Max Kellermann
b54762a8f6
event/ServerSocket: fix assertion failure
...
Regression from previous commit. D'oh!
2013-11-04 20:16:28 +01:00
Max Kellermann
bcae86196c
event/ServerSocket: open sockets in the order they were configured
...
Use a std::list which can be appended at the end.
2013-11-04 20:10:46 +01:00
Max Kellermann
20597b3632
*: use nullptr instead of NULL
2013-10-28 23:58:17 +01:00
Max Kellermann
3274bb54ad
event/ServerSocket: pass AllocatedPath to AddPath()
2013-10-19 17:40:56 +02:00
Max Kellermann
43863a70c8
SignalMonitor: add SignalMonitorGetEventLoop()
...
Eliminate the global variable "shutdown_loop".
2013-10-18 08:44:40 +02:00
Max Kellermann
12ab556477
event/BufferedSocket: pass writable pointer to OnSocketInput()
...
Remove the const_cast from HttpdClient.cxx, and avoid one allocation
in ClientRead.cxx.
2013-10-15 22:47:46 +02:00
Max Kellermann
84d20d9e43
util/FifoBuffer: C++ version of the fifo_buffer library
2013-10-15 10:28:52 +02:00
Max Kellermann
0c13703da3
system/clock: convert to C++
2013-10-15 09:38:12 +02:00
Max Kellermann
b97b7a7493
require GLib 2.28
...
The header glib_compat.h is now obsolete and can be removed.
2013-10-15 09:35:25 +02:00
Max Kellermann
be2951b45f
gcc.h: rename to Compiler.h
2013-10-15 09:21:59 +02:00
Max Kellermann
060814daa8
Log: new logging library API
...
Prepare to migrate away from GLib. Currently, we're still using GLib
as a backend.
2013-10-02 08:57:55 +02:00
Max Kellermann
ee9e238179
system/SocketError: un-inline constructor
...
Reduces header dependencies.
2013-09-04 23:36:30 +02:00
Max Kellermann
29030b54c9
util/Error: new error passing library
...
Replaces GLib's GError.
2013-09-04 18:14:22 +02:00
Max Kellermann
c9fcc7f148
system/resolver: convert to C++
2013-09-04 18:02:09 +02:00
Max Kellermann
00420ef9ca
EventLoop: initialise the thread id explicitly
2013-08-10 14:01:55 +02:00
Max Kellermann
c1f4f1fdb6
EventLoop: new implementation using epoll
...
Implement an event loop without GLib.
2013-08-10 13:54:23 +02:00