aboutsummaryrefslogtreecommitdiff
path: root/src/mixer_control.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-03-26 19:46:39 +0100
committerMax Kellermann <max@duempel.org>2009-03-26 19:46:39 +0100
commit69759b573f549857daef8789741903a03f8e9b22 (patch)
tree8149c37bfabeeb8422237175c062aa5267faa177 /src/mixer_control.c
parent1fcf09a816977db8e12e4534d7c4ced5c053f0de (diff)
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 'src/mixer_control.c')
-rw-r--r--src/mixer_control.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/mixer_control.c b/src/mixer_control.c
index cb3c2a87..908de5c5 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);