| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commit 77c63511 caused MPD to become stuck right after a song change.
The problem was that at some point, the MusicBuffer became full, and
the DecoderThread working on the next song waits for the PlayerThread.
However, the PlayerThread was stuck in a loop of g_usleep() calls, and
never bothered to tell the DecoderThread that the MusicBuffer is not
full anymore. This bug is very old, but its chance to occur went from
nearly 0% to nearly 100%.
The fix is to wake up the DecoderThread before waiting for it. As a
side effect, I replaced the g_usleep() call with a Cond::Wait() call.
|
|
|
|
|
| |
Remove the "do_wait" parameter which is always true. Check only
command==NONE and merge the "return" statements.
|
|
|
|
| |
Nothing of interest happens here. No need to wake up the player.
|
|
|
|
|
|
| |
Allows big-endian users to configure the fallback byte order to
little-endian. Without this setting, MPD assumes native byte order if
the CD drive can't decide.
|
|
|
|
| |
Avoid closing it twice.
|
|
|
|
| |
Fixes a crash bug. See code comment.
|
|
|
|
|
| |
Wake up the OutputThread only if it hasn't already been woken up and
if it isn't already in the playback loop.
|
|
|
|
|
|
|
| |
After the number of decoded chunks has fallen below the threshold, the
PlayerThread woke up the DecoderThread over and over. This commit
adds a boolean flag that avoids these duplicate wakeups, and thus
reduces the number of system calls.
|
|
|
|
|
| |
Wake up the PlayerThread only if it is really waiting for the decoder.
This greatly reduces the number of system calls in the DecoderThread.
|
|
|
|
| |
Must hold the Mutex to signal the Cond object safely.
|
|
|
|
| |
Merge duplicate code.
|
|
|
|
| |
We have a better solution now.
|
|
|
|
|
|
| |
Add a new CommandResult code called "FINISH" which, unlike "CLOSE",
will attempt to flush the output buffer. This is a one-shot attempt;
it will do one write, and not try again.
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
.. and rename it to Flush().
|
|
|
|
|
|
| |
For some reason, this got lost in commit 975deca8.
Re-enabling this fixes stuttering at the beginning of radio streams.
|
|
|
|
|
|
|
|
|
|
|
| |
Migrate from the old curl_multi_perform() API to the newer
curl_multi_socket_action() API (since CURL 7.16).
This allows working around a bug with HTTP redirections with epoll:
when CURL closes a socket and the new one happens to have the same
file number, MPD did not have a chance to remove the old one from
epoll and subsequently attempted to use EPOLL_CTL_MOD, which was not
allowed by epoll, because it's a new socket now.
|
|
|
|
|
| |
Move all global variables there, and keep just one global variable:
the pointer to the CurlMulti instance. Prepares for the next commit.
|
|
|
|
| |
Unused.
|
|
|
|
| |
Eliminate some complicated code that's not worth the trouble.
|
|
|
|
| |
Replaces the loop in input_curl_find_request().
|
| |
|
|
|
|
| |
D'oh!
|
|
|
|
|
| |
Remove the forward_list::reverse() call. It was not necessary,
because pls_parser() already reads the playlist in reverse order.
|
| |
|
|
|
|
|
|
| |
Fixes building with gcc-4.8
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
|
|
|
|
| |
See code comment.
|
|
|
|
| |
First check if an IPv6 socket can be created.
|
|
|
|
|
|
| |
Map LogLevel::INFO to G_LOG_LEVEL_INFO, and LogLevel::DEFAULT to
G_LOG_LEVEL_MESSAGE. Now client connect/disconnect message are only
logged on log_level "secure".
|
| |
|
|
|
|
| |
Regression from previous commit. D'oh!
|
|
|
|
| |
Use a std::list which can be appended at the end.
|
|
|
|
| |
getnameinfo() doesn't work well - it always returns "localhost".
|
| |
|
|
|
|
|
|
|
|
| |
This prevented using the "volume_normalization" feature with some
codecs (e.g. mp3), because the normalization code requires 16 bit
samples. If the codec happens to deliver formats other than S16, the
AutoConvert filter succeeds to initialize the conversion filter, but
the returned input audio format was wrong.
|
| |
|
|
|
|
|
| |
Skip the global destructors. We don't need them here - we bail out as
quickly as we can.
|
| |
|
| |
|
|
|
|
| |
Fixes assertion failure.
|
| |
|
|
|
|
| |
mixramp_delay==nan() causes severe problems with cross-fading.
|
|
|
|
|
|
| |
2 MB was too small for cross-fading a 24 bit file. Increasing to 4 MB
is still not too large for weak machines, but is enough for
cross-fading.
|
| |
|