diff options
author | Max Kellermann <max@duempel.org> | 2009-03-26 19:46:39 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-03-26 19:46:39 +0100 |
commit | 69759b573f549857daef8789741903a03f8e9b22 (patch) | |
tree | 8149c37bfabeeb8422237175c062aa5267faa177 /src/mixer_control.c | |
parent | 1fcf09a816977db8e12e4534d7c4ced5c053f0de (diff) | |
download | mpd-69759b573f549857daef8789741903a03f8e9b22.tar.gz mpd-69759b573f549857daef8789741903a03f8e9b22.tar.xz mpd-69759b573f549857daef8789741903a03f8e9b22.zip |
mixer: don't reopen failed mixer automatically
If a (global) mixer has been closed due to failure, don't reopen it
with every volume get/set. Leave it closed until it is explicitly
opened.
Diffstat (limited to '')
-rw-r--r-- | src/mixer_control.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/mixer_control.c b/src/mixer_control.c index cb3c2a87e..908de5c54 100644 --- a/src/mixer_control.c +++ b/src/mixer_control.c @@ -82,6 +82,8 @@ mixer_open(struct mixer *mixer) else success = mixer->open = mixer->plugin->open(mixer); + mixer->failed = !success; + g_mutex_unlock(mixer->mutex); return success; @@ -120,6 +122,8 @@ mixer_failed(struct mixer *mixer) assert(mixer->open); mixer_close(mixer); + + mixer->failed = true; } int @@ -129,7 +133,7 @@ mixer_get_volume(struct mixer *mixer) assert(mixer != NULL); - if (mixer->plugin->global && !mixer_open(mixer)) + if (mixer->plugin->global && !mixer->failed && !mixer_open(mixer)) return -1; g_mutex_lock(mixer->mutex); @@ -153,7 +157,7 @@ mixer_set_volume(struct mixer *mixer, unsigned volume) assert(mixer != NULL); - if (mixer->plugin->global && !mixer_open(mixer)) + if (mixer->plugin->global && !mixer->failed && !mixer_open(mixer)) return false; g_mutex_lock(mixer->mutex); |