aboutsummaryrefslogtreecommitdiffstats
path: root/src/output_control.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-10-29 22:32:50 +0100
committerMax Kellermann <max@duempel.org>2008-10-29 22:32:50 +0100
commit7da0e005f34bd8ce305b8ece7a33a8405bbaba87 (patch)
treef363b239548d64895fcd0a5603fca951d4738eec /src/output_control.c
parent0eae1c55adefc3e7509b2ef40f4da8baa3fe24ef (diff)
downloadmpd-7da0e005f34bd8ce305b8ece7a33a8405bbaba87.tar.gz
mpd-7da0e005f34bd8ce305b8ece7a33a8405bbaba87.tar.xz
mpd-7da0e005f34bd8ce305b8ece7a33a8405bbaba87.zip
output: delay reopen after device failure
When one of several output devices failed, MPD tried to reopen it quite often, wasting a lot of resources. This patch adds a delay: wait 10 seconds before retrying. This might be changed to exponential delays later, but for now, it makes the problem go away.
Diffstat (limited to 'src/output_control.c')
-rw-r--r--src/output_control.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/output_control.c b/src/output_control.c
index 142ac765e..c4c9510dc 100644
--- a/src/output_control.c
+++ b/src/output_control.c
@@ -57,6 +57,8 @@ audio_output_open(struct audio_output *audioOutput,
{
bool ret = true;
+ audioOutput->reopen_after = 0;
+
if (audioOutput->open &&
audio_format_equals(audioFormat, &audioOutput->inAudioFormat)) {
return true;
@@ -93,9 +95,10 @@ void
audio_output_update(struct audio_output *ao,
const struct audio_format *audio_format)
{
- if (ao->enabled)
- audio_output_open(ao, audio_format);
- else if (audio_output_is_open(ao))
+ if (ao->enabled) {
+ if (ao->reopen_after == 0 || time(NULL) > ao->reopen_after)
+ audio_output_open(ao, audio_format);
+ } else if (audio_output_is_open(ao))
audio_output_close(ao);
}