Module Name: src
Committed By: isaki
Date: Tue Aug 8 05:54:14 UTC 2017
Modified Files:
src/sys/dev: audio.c
Log Message:
Introduce audio_destroy_pfilters()/audio_destroy_rfilters()
and use it.
To generate a diff of this commit:
cvs rdiff -u -r1.389 -r1.390 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.389 src/sys/dev/audio.c:1.390
--- src/sys/dev/audio.c:1.389 Tue Aug 8 05:46:23 2017
+++ src/sys/dev/audio.c Tue Aug 8 05:54:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: audio.c,v 1.389 2017/08/08 05:46:23 isaki Exp $ */
+/* $NetBSD: audio.c,v 1.390 2017/08/08 05:54:14 isaki Exp $ */
/*-
* Copyright (c) 2016 Nathanial Sloss <[email protected]>
@@ -148,7 +148,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.389 2017/08/08 05:46:23 isaki Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.390 2017/08/08 05:54:14 isaki Exp $");
#ifdef _KERNEL_OPT
#include "audio.h"
@@ -298,6 +298,8 @@ static int audio_setup_pfilters(struct a
stream_filter_list_t *, struct virtual_channel *);
static int audio_setup_rfilters(struct audio_softc *, const audio_params_t *,
stream_filter_list_t *, struct virtual_channel *);
+static void audio_destroy_pfilters(struct virtual_channel *);
+static void audio_destroy_rfilters(struct virtual_channel *);
static void audio_stream_dtor(audio_stream_t *);
static int audio_stream_ctor(audio_stream_t *, const audio_params_t *, int);
static void stream_filter_list_append(stream_filter_list_t *,
@@ -864,7 +866,7 @@ audiodetach(device_t self, int flags)
{
struct audio_softc *sc;
struct audio_chan *chan;
- int maj, mn, i, rc;
+ int maj, mn, rc;
sc = device_private(self);
DPRINTF(("audio_detach: sc=%p flags=%d\n", sc, flags));
@@ -941,21 +943,8 @@ audiodetach(device_t self, int flags)
if (chan->chan == MIXER_INUSE)
continue;
- for (i = 0; i < chan->vc->sc_npfilters; i++) {
- chan->vc->sc_pfilters[i]->dtor
- (chan->vc->sc_pfilters[i]);
- chan->vc->sc_pfilters[i] = NULL;
- audio_stream_dtor(&chan->vc->sc_pstreams[i]);
- }
- chan->vc->sc_npfilters = 0;
-
- for (i = 0; i < chan->vc->sc_nrfilters; i++) {
- chan->vc->sc_rfilters[i]->dtor
- (chan->vc->sc_rfilters[i]);
- chan->vc->sc_rfilters[i] = NULL;
- audio_stream_dtor(&chan->vc->sc_rstreams[i]);
- }
- chan->vc->sc_nrfilters = 0;
+ audio_destroy_pfilters(chan->vc);
+ audio_destroy_rfilters(chan->vc);
}
auconv_delete_encodings(sc->sc_encodings);
@@ -1451,6 +1440,32 @@ audio_setup_rfilters(struct audio_softc
}
static void
+audio_destroy_pfilters(struct virtual_channel *vc)
+{
+ int i;
+
+ for (i = 0; i < vc->sc_npfilters; i++) {
+ vc->sc_pfilters[i]->dtor(vc->sc_pfilters[i]);
+ vc->sc_pfilters[i] = NULL;
+ audio_stream_dtor(&vc->sc_pstreams[i]);
+ }
+ vc->sc_npfilters = 0;
+}
+
+static void
+audio_destroy_rfilters(struct virtual_channel *vc)
+{
+ int i;
+
+ for (i = 0; i < vc->sc_nrfilters; i++) {
+ vc->sc_rfilters[i]->dtor(vc->sc_rfilters[i]);
+ vc->sc_rfilters[i] = NULL;
+ audio_stream_dtor(&vc->sc_pstreams[i]);
+ }
+ vc->sc_nrfilters = 0;
+}
+
+static void
audio_stream_dtor(audio_stream_t *stream)
{
@@ -2113,7 +2128,7 @@ audio_open(dev_t dev, struct audio_softc
struct lwp *l, struct file **nfp)
{
struct file *fp;
- int error, fd, i, n;
+ int error, fd, n;
u_int mode;
const struct audio_hw_if *hw;
struct virtual_channel *vc;
@@ -2273,18 +2288,8 @@ audio_open(dev_t dev, struct audio_softc
return error;
bad:
- for (i = 0; i < vc->sc_npfilters; i++) {
- vc->sc_pfilters[i]->dtor(vc->sc_pfilters[i]);
- vc->sc_pfilters[i] = NULL;
- audio_stream_dtor(&vc->sc_pstreams[i]);
- }
- vc->sc_npfilters = 0;
- for (i = 0; i < vc->sc_nrfilters; i++) {
- vc->sc_rfilters[i]->dtor(vc->sc_rfilters[i]);
- vc->sc_rfilters[i] = NULL;
- audio_stream_dtor(&vc->sc_rstreams[i]);
- }
- vc->sc_nrfilters = 0;
+ audio_destroy_pfilters(vc);
+ audio_destroy_rfilters(vc);
if (hw->close != NULL && sc->sc_opens == 0)
hw->close(sc->hw_hdl);
mutex_exit(sc->sc_lock);
@@ -2432,7 +2437,6 @@ audio_close(struct audio_softc *sc, int
{
struct virtual_channel *vc;
const struct audio_hw_if *hw;
- int o;
KASSERT(mutex_owned(sc->sc_lock));
@@ -2493,19 +2497,9 @@ audio_close(struct audio_softc *sc, int
vc->sc_open = 0;
vc->sc_mode = 0;
vc->sc_full_duplex = 0;
-
- for (o = 0; o < vc->sc_npfilters; o++) {
- vc->sc_pfilters[o]->dtor(vc->sc_pfilters[o]);
- vc->sc_pfilters[o] = NULL;
- audio_stream_dtor(&vc->sc_pstreams[o]);
- }
- vc->sc_npfilters = 0;
- for (o = 0; o < vc->sc_nrfilters; o++) {
- vc->sc_rfilters[o]->dtor(vc->sc_rfilters[o]);
- vc->sc_rfilters[o] = NULL;
- audio_stream_dtor(&vc->sc_rstreams[o]);
- }
- vc->sc_nrfilters = 0;
+
+ audio_destroy_pfilters(vc);
+ audio_destroy_rfilters(vc);
if (flags & FREAD)
sc->sc_recopens--;