tReuse the mixer handle if possible to reduce CPU usage - spoon - dwm status utility (2f30 fork) (HTM) git clone git://src.adamsgaard.dk/spoon (DIR) Log (DIR) Files (DIR) Refs (DIR) LICENSE --- (DIR) commit a722598c8613433000b5d3fae11e776ff9f438c2 (DIR) parent 3cf78be48fa1328e4f0d8e36c8a1576aa90b8388 (HTM) Author: lostd <lostd@2f30.org> Date: Mon, 7 Nov 2016 12:13:47 +0000 Reuse the mixer handle if possible to reduce CPU usage Diffstat: M mix.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) --- (DIR) diff --git a/mix.c b/mix.c t@@ -71,15 +71,18 @@ mixread(void *arg, char *buf, size_t len) { snd_mixer_selem_id_t *id; snd_mixer_elem_t *elem; - snd_mixer_t *mixerp; + static snd_mixer_t *mixerp; long min, max, vol; - int ret = -1, r; + int r; int master; snd_mixer_selem_id_alloca(&id); snd_mixer_selem_id_set_name(id, "Master"); snd_mixer_selem_id_set_index(id, 0); + if (mixerp != NULL) + goto readvol; + r = snd_mixer_open(&mixerp, O_RDONLY); if (r < 0) { warnx("snd_mixer_open: %s", snd_strerror(r)); t@@ -100,6 +103,7 @@ mixread(void *arg, char *buf, size_t len) warnx("snd_mixer_load: %s", snd_strerror(r)); goto out; } +readvol: elem = snd_mixer_find_selem(mixerp, id); if (elem == NULL) { warnx("could not find mixer element"); t@@ -126,9 +130,10 @@ mixread(void *arg, char *buf, size_t len) else master = 100 * vol / max; snprintf(buf, len, "%d%%", master); - ret = 0; + return 0; out: snd_mixer_close(mixerp); - return ret; + mixerp = NULL; + return -1; } #endif