Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | event/Loop: remove the GLib implementation | Max Kellermann | 2014-01-04 | 13 | -722/+22 | |
| | | | | | Now that the remaining known bugs in poll() implementation are fixed, we can go on without the GLib implementation. | |||||
* | output/httpd: move Bind()/Unbind() to the IOThread | Max Kellermann | 2014-01-04 | 1 | -4/+8 | |
| | | | | Fixes more thread-safety bugs. | |||||
* | event/poll: eliminate one vector::size() call | Max Kellermann | 2014-01-04 | 1 | -2/+3 | |
| | ||||||
* | output/httpd: move all broadcast operations to the IOThread | Max Kellermann | 2014-01-04 | 2 | -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. | |||||
* | output/httpd: use the IOThread | Max Kellermann | 2014-01-04 | 1 | -2/+2 | |
| | | | | | Do all I/O in the IOThread and not in the main thread. This solves an upcoming deadlock problem. | |||||
* | output/httpd: move queue size check to HttpdClient::PushPage() | Max Kellermann | 2014-01-04 | 3 | -18/+6 | |
| | | | | Don't let the server care for client problems. | |||||
* | output/httpd: wrap the std::list in std::queue | Max Kellermann | 2014-01-04 | 2 | -6/+16 | |
| | ||||||
* | output/httpd: merge duplicate code to ClearQueue() | Max Kellermann | 2014-01-04 | 2 | -5/+15 | |
| | ||||||
* | output/httpd: keep track of queue size | Max Kellermann | 2014-01-04 | 2 | -13/+14 | |
| | | | | Don't iterate the std::list each time. | |||||
* | 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. | |||||
* | mixer/alsa: use DeferredMonitor to update file descriptors | Max Kellermann | 2014-01-04 | 1 | -14/+7 | |
| | | | | | EventLoop::AddCall() and EventLoop::AddIdle() are unsafe, because we can't cancel those calls. | |||||
* | 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(). | |||||
* | Added application key for soundcloud plugin | James McGlashan (DarkFox) | 2014-01-04 | 1 | -1/+2 | |
| | ||||||
* | Added soundcloud documentation | James McGlashan (DarkFox) | 2014-01-04 | 1 | -0/+41 | |
| | ||||||
* | Added user and search paramaters for SoundCloud plugin | James McGlashan (DarkFox) | 2014-01-04 | 1 | -0/+8 | |
| | ||||||
* | http -> https for SoundCloud plugin | James McGlashan (DarkFox) | 2014-01-02 | 2 | -6/+8 | |
| | ||||||
* | output/httpd: change "struct" to "class" | Max Kellermann | 2013-12-31 | 3 | -4/+7 | |
| | ||||||
* | output/httpd: move code to methods Delay(), Play(), Cancel() | Max Kellermann | 2013-12-31 | 2 | -22/+46 | |
| | ||||||
* | output/httpd: move Cast() into the class | Max Kellermann | 2013-12-31 | 2 | -25/+23 | |
| | ||||||
* | output/httpd: add methods Init(), Finish() | Max Kellermann | 2013-12-31 | 2 | -12/+29 | |
| | ||||||
* | output/httpd: use reference instead of pointer | Max Kellermann | 2013-12-31 | 3 | -14/+14 | |
| | ||||||
* | output/httpd: make the HttpdClient base class "private" | Max Kellermann | 2013-12-31 | 1 | -1/+1 | |
| | ||||||
* | 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 | |
| | ||||||
* | command: "lsinfo" and "readcomments" allowed for remote files | Max Kellermann | 2013-12-29 | 6 | -0/+68 | |
| | ||||||
* | SongUpdate: read tags from songs in an archive | Max Kellermann | 2013-12-29 | 5 | -5/+131 | |
| | | | | | Add the TagStream.cxx library, similar to TagFile.cxx, and use it to load tags from song files inside archives. | |||||
* | InputStream: add static method OpenReady() | Max Kellermann | 2013-12-29 | 11 | -62/+47 | |
| | | | | Merge some duplicate code. | |||||
* | TagFile: rewind the stream before trying the next plugin | Max Kellermann | 2013-12-29 | 1 | -1/+2 | |
| | | | | Got lost in commit c97685fe | |||||
* | DecoderList: add "pure" attribute | Max Kellermann | 2013-12-29 | 1 | -0/+1 | |
| | ||||||
* | DecoderList: add function decoder_plugins_supports_suffix() | Max Kellermann | 2013-12-29 | 4 | -54/+20 | |
| | | | | Replaces decoder_plugin_from_suffix(). | |||||
* | DecoderThread: use decoder_plugins_try() | Max Kellermann | 2013-12-29 | 1 | -32/+44 | |
| | | | | | .. instead of decoder_plugin_from_suffix(). This reduces overhead by walking the array only once. | |||||
* | UpdateContainer: pass suffix instead of DecoderPlugin | Max Kellermann | 2013-12-29 | 3 | -6/+18 | |
| | | | | | Instead of using the first DecoderPlugin that supports the suffix, use the first one that actually implements the "container_scan" method. | |||||
* | TagFile: pass reference instead of pointer | Max Kellermann | 2013-12-29 | 5 | -9/+6 | |
| | ||||||
* | TagFile: use decoder_plugins_try() | Max Kellermann | 2013-12-29 | 1 | -41/+54 | |
| | | | | | | .. instead of decoder_plugin_from_suffix(). This reduces overhead by walking the array only once. | |||||
* | DecoderList: remove unused function decoder_plugin_from_mime_type() | Max Kellermann | 2013-12-29 | 2 | -25/+0 | |
| | ||||||
* | Merge branch 'v0.18.x' | Max Kellermann | 2013-12-29 | 3 | -9/+18 | |
|\ | ||||||
| * | configure.ac: improved check for libyajl 1.0 | Max Kellermann | 2013-12-29 | 2 | -1/+3 | |
| | | | | | | | | | | | | | | | | If we have libyajl 2.0.1 (without a pkg-config file), our configure.ac would assume this is the libyajl 1.0 API, because the function yajl_alloc() exists in both. This commit changes the library check to the function yajl_parse_complete() which was removed in the 2.0 API. This fixes build failure with libyajl 2.0.1. | |||||
| * | daemon: no initgroups() when already running as the configured user | Max Kellermann | 2013-12-29 | 2 | -1/+7 | |
| | | | | | | | | | | We can assume that initgroups() would be a no-op in that case, however initgroups() is not allowed for unprivileged users anyway. | |||||
| * | Daemon: fix typo in comment | Max Kellermann | 2013-12-29 | 1 | -1/+1 | |
| | | ||||||
| * | Daemon: simplify nested "if" | Max Kellermann | 2013-12-29 | 1 | -5/+4 | |
| | | ||||||
| * | Daemon: fix typo in cast | Max Kellermann | 2013-12-29 | 1 | -1/+1 | |
| | | ||||||
| * | configure.ac: prepare for 0.18.7 | Max Kellermann | 2013-12-29 | 2 | -1/+3 | |
| | | ||||||
* | | input/smbclient: new input plugin | Max Kellermann | 2013-12-29 | 8 | -0/+274 | |
| | | ||||||
* | | ls: add "pure" attribute | Max Kellermann | 2013-12-29 | 1 | -0/+3 | |
| | | ||||||
* | | pcm/Volume: remove unused function pcm_volume_dither() | Max Kellermann | 2013-12-28 | 1 | -16/+0 | |
| | | ||||||
* | | pcm/PcmMix: improved dithering | Max Kellermann | 2013-12-28 | 5 | -25/+48 | |
| | | | | | | | | Use the existing PcmDither library. | |||||
* | | pcm/Volume: improved dithering | Max Kellermann | 2013-12-28 | 6 | -22/+59 | |
| | | | | | | | | | | Instead of just adding a rectangular random value before shifting back to the normal scale, use the existing PcmDither library. |