summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornat <nat@NetBSD.org>2018-01-06 23:15:36 +0000
committernat <nat@NetBSD.org>2018-01-06 23:15:36 +0000
commit514bccbfc25f307027ecf793359b02a5990f4b6d (patch)
tree02c1cd1df433ef32247b8ae3b0ff098170595ee0
parenteceb26383e14676e5cf70a78ba6cd98be191a3e2 (diff)
Only signal a pause change on a transition of a pause change.
This addresses a problem found in audio/sox causing high cpu usage. Path and analysis by Onno van der Linden.
-rw-r--r--sys/dev/audio.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/dev/audio.c b/sys/dev/audio.c
index 32d2a0dfc77..6db368693fd 100644
--- a/sys/dev/audio.c
+++ b/sys/dev/audio.c
@@ -1,4 +1,4 @@
-/* $NetBSD: audio.c,v 1.446 2018/01/06 21:16:36 nat Exp $ */
+/* $NetBSD: audio.c,v 1.447 2018/01/06 23:15:36 nat Exp $ */
/*-
* Copyright (c) 2016 Nathanial Sloss <nathanialsloss@yahoo.com.au>
@@ -148,7 +148,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.446 2018/01/06 21:16:36 nat Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.447 2018/01/06 23:15:36 nat Exp $");
#ifdef _KERNEL_OPT
#include "audio.h"
@@ -4762,14 +4762,18 @@ audiosetinfo(struct audio_softc *sc, struct audio_info *ai, bool reset,
}
if (SPECIFIED_CH(p->pause)) {
- vc->sc_mpr.pause = p->pause;
pbus = !p->pause;
- pausechange = true;
+ if (pbus != !vc->sc_mpr.pause) {
+ vc->sc_mpr.pause = p->pause;
+ pausechange = true;
+ }
}
if (SPECIFIED_CH(r->pause)) {
- vc->sc_mrr.pause = r->pause;
rbus = !r->pause;
- pausechange = true;
+ if (rbus != !vc->sc_mrr.pause) {
+ vc->sc_mrr.pause = r->pause;
+ pausechange = true;
+ }
}
if (SPECIFIED(ai->mode)) {