- 16 Sep, 2011 8 commits
-
-
Max Kellermann authored
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.
-
Max Kellermann authored
To check for errors without reading. The decoder thread wants to do that, before it passes the input stream to the plugin.
-
Max Kellermann authored
Fix memory leak.
-
Max Kellermann authored
Pausing and resuming after every little chunk adds lots of overhead. Add a lower level for resuming the stream.
-
Max Kellermann authored
curl_easy_pause(CURLPAUSE_CONT) may have added enough data to go into pause again.
-
Max Kellermann authored
Call _update_fds() directly. This is possible because it's only called from within the I/O thread.
-
Max Kellermann authored
Fix deadlock.
-
Max Kellermann authored
-
- 15 Sep, 2011 6 commits
-
-
Max Kellermann authored
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.
-
Max Kellermann authored
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.
-
Max Kellermann authored
Move the assignment to _request_done(), right before the GCond is signalled. This might fix spurious wakeups.
-
Max Kellermann authored
-
Max Kellermann authored
This is a trivial function. Merge some duplicate code, e.g. the g_cond_broadcast() call.
-
Max Kellermann authored
-
- 14 Sep, 2011 1 commit
-
-
Max Kellermann authored
-
- 26 Aug, 2011 1 commit
-
-
Max Kellermann authored
Be sure to stop the operation at some point when the server isn't responding.
-
- 25 Aug, 2011 6 commits
-
-
Max Kellermann authored
Background buffering and better timeout handling. This patch sort of obsoletes the input_plugin method buffer().
-
Max Kellermann authored
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.
-
Max Kellermann authored
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.
-
Max Kellermann authored
Allow closing the handle while preserving the remaining buffers.
-
Max Kellermann authored
Remove a cast.
-
Max Kellermann authored
Let the caller know what happened, he's responsible for logging.
-
- 24 Aug, 2011 1 commit
-
-
Max Kellermann authored
-
- 23 Aug, 2011 1 commit
-
-
Max Kellermann authored
-
- 29 Jan, 2011 2 commits
-
-
Max Kellermann authored
-
Ian Zimmerman authored
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.
-
- 07 Sep, 2010 1 commit
-
-
Max Kellermann authored
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
-
- 20 Jul, 2010 2 commits
-
-
Max Kellermann authored
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.
-
Max Kellermann authored
Use curl_multi_timeout() to determine the select() timeout, instead of hard-coding one second.
-
- 18 Jan, 2010 2 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
All close() implementations must call this method.
-
- 01 Jan, 2010 2 commits
-
-
Max Kellermann authored
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).
-
Avuton Olrich authored
-
- 30 Dec, 2009 1 commit
-
-
Max Kellermann authored
This has been reimplemented in the "rewind" input plugin.
-
- 29 Dec, 2009 1 commit
-
-
Max Kellermann authored
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).
-
- 15 Dec, 2009 1 commit
-
-
Max Kellermann authored
-
- 14 Dec, 2009 1 commit
-
-
Max Kellermann authored
Not used by any plugin currently, but this eliminates the g_error() call in input_plugin_config(), so it's worth it.
-
- 12 Nov, 2009 1 commit
-
-
Max Kellermann authored
After we've been hit by Large File Support problems several times in the past week (which only occur on 32 bit platforms, which I don't have), this is yet another attempt to fix the issue.
-
- 10 Nov, 2009 1 commit
-
-
Max Kellermann authored
Drop the required GLib version from 2.16 to 2.12, because many current systems still don't have GLib 2.16. This requires several new compatibility functions in glib_compat.h.
-
- 13 Oct, 2009 1 commit
-
-
Max Kellermann authored
When the connection is lost while buffering, the CURL input plugin may enter an endless loop, because it does not check the EOF condition. This patch makes fill_buffer() return success only if there's at least one buffer, which is enough of a check.x
-