| Commit message (Collapse) | Author | Files | Lines |
|
Using initializer list.
|
|
Not necessary, GLib will pick up the updated GPollFD automatically.
|
|
|
|
|
|
|
|
|
|
|
|
Use the "url" attribute from the base class instead.
|
|
|
|
|
|
|
|
|
|
|
|
g_source_get_current_time() is deprecated since GLib 2.28. This patch
adds a compatibility wrapper for older GLib versions to glib_compat.h.
|
|
Add GMutex, GCond attributes which will be used by callers to
conditionally wait on the stream.
Remove the (now-useless) plugin method buffer(), wait on GCond
instead. Lock the input_stream before each method call. Do the same
with the playlist plugins.
|
|
To check for errors without reading. The decoder thread wants to do
that, before it passes the input stream to the plugin.
|
|
Fix memory leak.
|
|
Pausing and resuming after every little chunk adds lots of overhead.
Add a lower level for resuming the stream.
|
|
curl_easy_pause(CURLPAUSE_CONT) may have added enough data to go into
pause again.
|
|
Call _update_fds() directly. This is possible because it's only
called from within the I/O thread.
|
|
Fix deadlock.
|
|
|
|
The global data structures are now lock-free, because they are
accessed only from the I/O thread. By using per-request locks, we
have finer grained locking, preparing for locks shared with the
client.
|
|
This adds some overheads for indirect calls to the I/O thread, but
reduces the amount of global locks. Next step will be switching to
per-request locks.
|
|
Move the assignment to _request_done(), right before the GCond is
signalled. This might fix spurious wakeups.
|
|
|
|
This is a trivial function. Merge some duplicate code, e.g. the
g_cond_broadcast() call.
|
|
|
|
|
|
Be sure to stop the operation at some point when the server isn't
responding.
|
|
Background buffering and better timeout handling. This patch sort of
obsoletes the input_plugin method buffer().
|
|
Assume the flag is true when the "easy" CURL handle is NULL. That
way, we don't need to keep track if CURL has sent us the "DONE"
information yet.
|
|
Release it immediately when end-of-file has been reached. We don't
need that handle anymore, because the rest is delivered from the
buffers.
|
|
Allow closing the handle while preserving the remaining buffers.
|
|
Remove a cast.
|
|
Let the caller know what happened, he's responsible for logging.
|
|
|
|
|
|
|
|
I wanted mpd to play a mp3 stream from a music website. The stream is
only available to subscribers, which restriction is enforced through
normal http authentication. However, the URL I get from the website
is not the final URL of the stream, but a generic URL which points to
the real one through a redirect (code 301). Thus, I cannot predict
the final URL, and so I cannot use the username:password hack to force
the authentication, and mpd (libcurl on mpds behalf) fails to grab the
stream.
libcurl allows the option CURLOPT_NETRC to be set and then the
credentials can be stored in the good old .netrc file (in this case it
would be ~mpd/.netrc, of course). But mpd doesn't set this option. I
think it should.
|
|
According to the CURL web site, curl_multi_timeout() was added in
version 7.15.4:
http://curl.haxx.se/libcurl/c/curl_multi_timeout.html
|
|
Some users reported that MPD crashes when using a new CURL version
with the threaded DNS resolver enabled. It seems that
curl_multi_fdset() returns no file descriptor when the DNS resolver
runs in another thread, so MPD does not have any event to wait for.
On the CURL mailing list, somebody suggested to sleep for a fixed
amount of time. This is not an elegant solution, because daemons
should never have to sleep without waiting for an event. I hope the
CURL developers will review the API and remove the threaded DNS
resolver.
Meanwhile, I'm removing the assertion in question, to allow those
unfortunate users running the latest CURL version to continue using
MPD.
|
|
Use curl_multi_timeout() to determine the select() timeout, instead of
hard-coding one second.
|
|
|
|
All close() implementations must call this method.
|
|
Major API redesign: don't let the caller allocate the input_stream
object. Let each input plugin allocate its own (derived/extended)
input_stream pointer. The "data" attribute can now be removed, and
all input plugins simply cast the input_stream pointer to their own
structure (with an "struct input_stream base" as the first attribute).
|
|
|
|
This has been reimplemented in the "rewind" input plugin.
|
|
This replaces the rewinding buffer code from the CURL input plugin.
It is more generic, and allows rewinding even when the server sends
Icy-Metadata (which would have been too difficult to implement within
the CURL plugin).
This is a rather complex patch for the stable branch (v0.15.x), but it
fixes a serious problem: the "vorbis" decoder plugin was unable to
play streams with Icy-Metadata, because it couldn't rewind the stream
after detecting the codec (Vorbis vs. FLAC).
|
|
|