summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorBrad Smith <brad@cvs.openbsd.org>2006-06-28 08:23:07 +0000
committerBrad Smith <brad@cvs.openbsd.org>2006-06-28 08:23:07 +0000
commitb21aee92feebd36b06805d843c42e3afdbb76337 (patch)
tree1a89470d337886db98501fa0c48f27256ef14fac /sys/dev
parent6226cefa9b768f035c2c69e8ac409cb9b9b387b7 (diff)
* azalia_pci_detach()
add some debug messages * azalia_codec_delete() fix a possible NULL dereference From kent NetBSD
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/azalia.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/dev/pci/azalia.c b/sys/dev/pci/azalia.c
index ea7845d0ed8..c2334cedbad 100644
--- a/sys/dev/pci/azalia.c
+++ b/sys/dev/pci/azalia.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia.c,v 1.18 2006/06/25 00:45:00 brad Exp $ */
+/* $OpenBSD: azalia.c,v 1.19 2006/06/28 08:23:06 brad Exp $ */
/* $NetBSD: azalia.c,v 1.20 2006/05/07 08:31:44 kent Exp $ */
/*-
@@ -427,19 +427,28 @@ azalia_pci_detach(struct device *self, int flags)
azalia_t *az;
int i;
+ DPRINTF(("%s\n", __func__));
az = (azalia_t*)self;
if (az->audiodev != NULL) {
config_detach(az->audiodev, flags);
az->audiodev = NULL;
}
+
+ DPRINTF(("%s: delete streams\n", __func__));
azalia_stream_delete(&az->rstream, az);
azalia_stream_delete(&az->pstream, az);
+
+ DPRINTF(("%s: delete codecs\n", __func__));
for (i = 0; i < az->ncodecs; i++) {
azalia_codec_delete(&az->codecs[i]);
}
az->ncodecs = 0;
+
+ DPRINTF(("%s: delete CORB and RIRB\n", __func__));
azalia_delete_corb(az);
azalia_delete_rirb(az);
+
+ DPRINTF(("%s: delete PCI resources\n", __func__));
if (az->ih != NULL) {
pci_intr_disestablish(az->pc, az->ih);
az->ih = NULL;
@@ -1087,7 +1096,8 @@ azalia_codec_init(codec_t *this)
int
azalia_codec_delete(codec_t *this)
{
- this->mixer_delete(this);
+ if (this->mixer_delete != NULL)
+ this->mixer_delete(this);
if (this->formats != NULL) {
free(this->formats, M_DEVBUF);
this->formats = NULL;