- 29 May, 2019 1 commit
-
-
Max Kellermann authored
-
- 23 May, 2019 1 commit
-
-
Max Kellermann authored
These messages can be confusing, but they are not critical.
-
- 07 May, 2019 2 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
Prepare the transition to std::mutex.
-
- 26 Apr, 2019 9 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
Instead of keeping all open outputs locked, let ClearTailChunk() stall playback until MultipleOutputs::CheckPipe() has updated the MusicPipe.
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
Just like std::condition_variable, which however has no way to specify the std::mutex directly.
-
- 25 Apr, 2019 1 commit
-
-
Max Kellermann authored
-
- 04 Apr, 2019 1 commit
-
-
Max Kellermann authored
This missing piece probably never really hurt, because HttpdClient::OnSocketClosed() would be called right after a socket error, but it's better to be explicit about closing on error.
-
- 03 Apr, 2019 2 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
-
- 29 Mar, 2019 1 commit
-
-
François Revol authored
Fixes #184. Semaphores are kernel-managed objects, calling delete_sem() twice is not more dangerous than calling close() twice on an fd though, it would just return an error.
-
- 17 Mar, 2019 2 commits
-
-
Max Kellermann authored
-
Jacob Vosmaer authored
-
- 16 Mar, 2019 1 commit
-
-
Max Kellermann authored
Unlike pa_channel_map_init_auto(), pa_channel_map_init_extend() does not fail if there is no valid mapping for the given channel count, but instead maps additional "AUX" channels. Closes https://github.com/MusicPlayerDaemon/MPD/issues/493
-
- 08 Mar, 2019 1 commit
-
-
Max Kellermann authored
-
- 26 Jan, 2019 1 commit
-
-
Yue Wang authored
Currently it falls back to system default device (either internal speaker or headphone) when device not found. I believe it is a better to fail in this case, to make it better aligned with platforms (such as alsa).
-
- 21 Jan, 2019 1 commit
-
-
Max Kellermann authored
Fixes build failure after commit 0cea67ee
-
- 19 Jan, 2019 1 commit
-
-
Jakob Ovrum authored
-
- 28 Dec, 2018 5 commits
-
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
-
Max Kellermann authored
libwrap is an obscure artefact from a past long ago, when source IP address meant something. And its API is "interesting"; it requires the application to expose two global variables `allow_severity` and `deny_severity`. This led to bug #437. I don't want to declare those variables; instead, I'd like to remove libwrap support. Closes #437
-
- 14 Dec, 2018 1 commit
-
-
HyShai authored
-
- 19 Nov, 2018 1 commit
-
-
Max Kellermann authored
Since we switched from autotools to Meson in commit 94592c14, we don't need to include `config.h` early to properly enable large file support. Meson passes the required macros on the compiler command line instead of defining them in `config.h`. This means we can include `config.h` at any time, whenever we want to check its macros, and there are no ordering constraints.
-
- 16 Nov, 2018 1 commit
-
-
Max Kellermann authored
Works around a problem where MPD goes into a busy loop because snd_pcm_drain() always returns `-EAGAIN` without making any progress (fixes #425). This problem was triggered by snd_pcm_drain() after snd_pcm_cancel() and snd_pcm_prepare(), but without submitting any data with snd_pcm_writei(). I believe this is a kernel bug: in non-blocking mode, the kernel's snd_pcm_drain() function returns early. In this mode, it only checks whether snd_pcm_drain_done() has been called already, but snd_pcm_drain_done() is never called if no data was submitted. In blocking mode, the following `for` loop detects this condition, so snd_pcm_drain_done() is not necessary, but without this extra check, we get `-EAGAIN` forever.
-
- 14 Nov, 2018 7 commits
-
-
Max Kellermann authored
This fixes a problem which caused a failure with snd_pcm_writei() because snd_pcm_drain() had already been called in the previous iteration. This commit makes sure that snd_pcm_drain() is only called after the final snd_pcm_writei() call. This fixes discarded samples at the end of playback.
-
Max Kellermann authored
When a playback error has occurred, MPD would never recover until one restarts MPD.
-
Max Kellermann authored
CancelInternal() doesn't need to be protected because it is called synchronously from Cancel().
-
Max Kellermann authored
Fixes a theoretical race condition which could occur in Drain() (but was extremely unlikely).
-
Max Kellermann authored
If our `ring_buffer` is smaller than the ALSA-PCM buffer (if the latter has more than the 4 periods we allocate), it can happen that the start threshold is crossed and ALSA switches to `SND_PCM_STATE_RUNNING`, but the `ring_buffer` is empty. In this case, MPDD will generate silence, even though the ALSA-PCM buffer has enough data. This causes stuttering (#420). This commit amends an older workaround for a similar problem (commit e08598e7) by adding a snd_pcm_avail() check, and only generate silence if there is less than one period of data in the ALSA-PCM buffer. Fixes #420
-
Max Kellermann authored
The method Cancel() assumes that the `period_buffer` must be empty when `active==false`, but that is not the case when Play() fails. Of course the assertion in Cancel() is not 100% correct, but I decided to rather fix this in LockCaughtError() because the `period_buffer` should only be accessed from within the RTIO thread, and this is the only code path where `active` can be set to `false` with a non-empty `period_buffer`. Fixes #423
-
Max Kellermann authored
This implements real error handling, and avoids calling CancelInternal() from this code path.
-