Module Name: src
Committed By: nat
Date: Tue May 16 23:55:53 UTC 2017
Modified Files:
src/sys/dev: audio.c
Log Message:
Set sc_[trigger/rec]_started before the call to trigger_[input/output].
This prevents multiple calls to trigger_[input/output] for those drivers
that drop sc_intr_lock in there trigger_[input/output] functions.
To generate a diff of this commit:
cvs rdiff -u -r1.350 -r1.351 src/sys/dev/audio.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/audio.c
diff -u src/sys/dev/audio.c:1.350 src/sys/dev/audio.c:1.351
--- src/sys/dev/audio.c:1.350 Tue May 16 21:43:18 2017
+++ src/sys/dev/audio.c Tue May 16 23:55:53 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: audio.c,v 1.350 2017/05/16 21:43:18 nat Exp $ */
+/* $NetBSD: audio.c,v 1.351 2017/05/16 23:55:53 nat Exp $ */
/*-
* Copyright (c) 2016 Nathanial Sloss <[email protected]>
@@ -148,7 +148,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.350 2017/05/16 21:43:18 nat Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.351 2017/05/16 23:55:53 nat Exp $");
#include "audio.h"
#if NAUDIO > 0
@@ -5470,11 +5470,13 @@ mix_read(void *arg)
if (sc->hw_if->trigger_input && sc->sc_rec_started == false) {
DPRINTF(("%s: call trigger_input\n", __func__));
+ sc->sc_rec_started = true;
error = sc->hw_if->trigger_input(sc->hw_hdl, vc->sc_mrr.s.start,
vc->sc_mrr.s.end, blksize,
audio_rint, (void *)sc, &vc->sc_mrr.s.param);
} else if (sc->hw_if->start_input) {
DPRINTF(("%s: call start_input\n", __func__));
+ sc->sc_rec_started = true;
error = sc->hw_if->start_input(sc->hw_hdl,
vc->sc_mrr.s.inp, blksize,
audio_rint, (void *)sc);
@@ -5483,8 +5485,8 @@ mix_read(void *arg)
/* XXX does this really help? */
DPRINTF(("audio_upmix restart failed: %d\n", error));
audio_clear(sc, SIMPLEQ_FIRST(&sc->sc_audiochan)->vc);
+ sc->sc_rec_started = false;
}
- sc->sc_rec_started = true;
inp = vc->sc_mrr.s.inp;
vc->sc_mrr.s.inp = audio_stream_add_inp(&vc->sc_mrr.s, inp, cc);
@@ -5575,16 +5577,17 @@ done:
if (sc->hw_if->trigger_output && sc->sc_trigger_started == false) {
DPRINTF(("%s: call trigger_output\n", __func__));
+ sc->sc_trigger_started = true;
error = sc->hw_if->trigger_output(sc->hw_hdl,
vc->sc_mpr.s.start, vc->sc_mpr.s.end, blksize,
audio_pint, (void *)sc, &vc->sc_mpr.s.param);
} else if (sc->hw_if->start_output) {
DPRINTF(("%s: call start_output\n", __func__));
+ sc->sc_trigger_started = true;
error = sc->hw_if->start_output(sc->hw_hdl,
__UNCONST(vc->sc_mpr.s.outp), blksize,
audio_pint, (void *)sc);
}
- sc->sc_trigger_started = true;
if (error) {
/* XXX does this really help? */