aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2014-01-05output/httpd: move the clients.clear() call to the IOThreadMax Kellermann1-1/+3
This call is not thread-safe.
2014-01-05output/httpd: import GetEventLoop()Max Kellermann2-3/+5
2014-01-05ClientList: use "delete" instead of Client::Close()Max Kellermann1-2/+8
Client::Close() installs a TimeoutMonitor, which is not something we should do during shutdown.
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 Kellermann3-18/+43
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-04output/httpd: move Bind()/Unbind() to the IOThreadMax Kellermann1-4/+8
Fixes more thread-safety bugs.
2014-01-04event/poll: eliminate one vector::size() callMax Kellermann1-2/+3
2014-01-04output/httpd: move all broadcast operations to the IOThreadMax Kellermann2-11/+76
Add a Page queue to class HttpdOutput, and use DeferredMonitor to flush this queue inside the IOThread. This fixes a thread-safety issue: much of EventLoop is not thread-safe, and the httpd plugin ignored that problem.
2014-01-04output/httpd: use the IOThreadMax Kellermann1-2/+2
Do all I/O in the IOThread and not in the main thread. This solves an upcoming deadlock problem.
2014-01-04output/httpd: move queue size check to HttpdClient::PushPage()Max Kellermann3-18/+6
Don't let the server care for client problems.
2014-01-04output/httpd: wrap the std::list in std::queueMax Kellermann2-6/+16
2014-01-04output/httpd: merge duplicate code to ClearQueue()Max Kellermann2-5/+15
2014-01-04output/httpd: keep track of queue sizeMax Kellermann2-13/+14
Don't iterate the std::list each time.
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-04mixer/alsa: use DeferredMonitor to update file descriptorsMax Kellermann1-14/+7
EventLoop::AddCall() and EventLoop::AddIdle() are unsafe, because we can't cancel those calls.
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().
2014-01-04Added application key for soundcloud pluginJames McGlashan (DarkFox)1-1/+2
2014-01-04Added user and search paramaters for SoundCloud pluginJames McGlashan (DarkFox)1-0/+8
2014-01-02http -> https for SoundCloud pluginJames McGlashan (DarkFox)1-6/+6
2013-12-31output/httpd: change "struct" to "class"Max Kellermann3-4/+7
2013-12-31output/httpd: move code to methods Delay(), Play(), Cancel()Max Kellermann2-22/+46
2013-12-31output/httpd: move Cast() into the classMax Kellermann2-25/+23
2013-12-31output/httpd: add methods Init(), Finish()Max Kellermann2-12/+29
2013-12-31output/httpd: use reference instead of pointerMax Kellermann3-14/+14
2013-12-31output/httpd: make the HttpdClient base class "private"Max Kellermann1-1/+1
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-29command: "lsinfo" and "readcomments" allowed for remote filesMax Kellermann4-0/+59
2013-12-29SongUpdate: read tags from songs in an archiveMax Kellermann3-5/+128
Add the TagStream.cxx library, similar to TagFile.cxx, and use it to load tags from song files inside archives.
2013-12-29InputStream: add static method OpenReady()Max Kellermann7-15/+41
Merge some duplicate code.
2013-12-29TagFile: rewind the stream before trying the next pluginMax Kellermann1-1/+2
Got lost in commit c97685fe
2013-12-29DecoderList: add "pure" attributeMax Kellermann1-0/+1
2013-12-29DecoderList: add function decoder_plugins_supports_suffix()Max Kellermann4-54/+20
Replaces decoder_plugin_from_suffix().
2013-12-29DecoderThread: use decoder_plugins_try()Max Kellermann1-32/+44
.. instead of decoder_plugin_from_suffix(). This reduces overhead by walking the array only once.
2013-12-29UpdateContainer: pass suffix instead of DecoderPluginMax Kellermann3-6/+18
Instead of using the first DecoderPlugin that supports the suffix, use the first one that actually implements the "container_scan" method.
2013-12-29TagFile: pass reference instead of pointerMax Kellermann5-9/+6
2013-12-29TagFile: use decoder_plugins_try()Max Kellermann1-41/+54
.. instead of decoder_plugin_from_suffix(). This reduces overhead by walking the array only once.
2013-12-29DecoderList: remove unused function decoder_plugin_from_mime_type()Max Kellermann2-25/+0
2013-12-29daemon: no initgroups() when already running as the configured userMax Kellermann1-1/+5
We can assume that initgroups() would be a no-op in that case, however initgroups() is not allowed for unprivileged users anyway.
2013-12-29Daemon: fix typo in commentMax Kellermann1-1/+1
2013-12-29Daemon: simplify nested "if"Max Kellermann1-5/+4
2013-12-29Daemon: fix typo in castMax Kellermann1-1/+1
2013-12-29input/smbclient: new input pluginMax Kellermann4-0/+238