aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristos Margiolis <christos@FreeBSD.org>2026-01-02 16:56:19 +0000
committerChristos Margiolis <christos@FreeBSD.org>2026-01-02 16:58:05 +0000
commitd912ea5879cd6b1042671ae3986d496c63be4d49 (patch)
treea4256de87a89bbf7496f0a90214d3f7f6d684d5f
parentfb945a50e2649c9a1c3a9b38ffb84f53e37abd0a (diff)
sound: Merge midi_destroy() with midi_uninit()
Also always call MPU_UNINIT(). It does not make sense not to if we are deallocating everything. Sponsored by: The FreeBSD Foundation MFC after: 1 week Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D54192
-rw-r--r--sys/dev/sound/midi/midi.c57
1 files changed, 14 insertions, 43 deletions
diff --git a/sys/dev/sound/midi/midi.c b/sys/dev/sound/midi/midi.c
index 901e098d4883..2567f7412eb8 100644
--- a/sys/dev/sound/midi/midi.c
+++ b/sys/dev/sound/midi/midi.c
@@ -97,8 +97,6 @@ static struct cdevsw midi_cdevsw = {
.d_name = "rmidi",
};
-static int midi_destroy(struct snd_midi *, int);
-
struct unrhdr *dev_unr = NULL;
struct unrhdr *chn_unr = NULL;
@@ -186,21 +184,15 @@ err1:
return NULL;
}
-/*
- * midi_uninit does not call MIDI_UNINIT, as since this is the implementors
- * entry point. midi_uninit if fact, does not send any methods. A call to
- * midi_uninit is a defacto promise that you won't manipulate ch anymore
- */
int
midi_uninit(struct snd_midi *m)
{
- int err;
-
- err = EBUSY;
mtx_lock(&m->lock);
if (m->busy) {
- if (!(m->rchan || m->wchan))
- goto err;
+ if (!(m->rchan || m->wchan)) {
+ mtx_unlock(&m->lock);
+ return (EBUSY);
+ }
if (m->rchan) {
wakeup(&m->rchan);
@@ -211,14 +203,17 @@ midi_uninit(struct snd_midi *m)
m->wchan = 0;
}
}
- err = midi_destroy(m, 0);
- if (!err)
- goto exit;
-
-err:
mtx_unlock(&m->lock);
-exit:
- return err;
+ MPU_UNINIT(m, m->cookie);
+ destroy_dev(m->dev);
+ free_unr(dev_unr, m->unit);
+ free_unr(chn_unr, m->channel);
+ free(MIDIQ_BUF(m->inq), M_MIDI);
+ free(MIDIQ_BUF(m->outq), M_MIDI);
+ mtx_destroy(&m->lock);
+ free(m, M_MIDI);
+
+ return (0);
}
#ifdef notdef
@@ -601,30 +596,6 @@ midi_poll(struct cdev *i_dev, int events, struct thread *td)
return (revents);
}
-/*
- * Single point of midi destructions.
- */
-static int
-midi_destroy(struct snd_midi *m, int midiuninit)
-{
- mtx_assert(&m->lock, MA_OWNED);
-
- MIDI_DEBUG(3, printf("midi_destroy\n"));
- m->dev->si_drv1 = NULL;
- mtx_unlock(&m->lock); /* XXX */
- destroy_dev(m->dev);
- /* XXX */
- if (midiuninit)
- MPU_UNINIT(m, m->cookie);
- free_unr(dev_unr, m->unit);
- free_unr(chn_unr, m->channel);
- free(MIDIQ_BUF(m->inq), M_MIDI);
- free(MIDIQ_BUF(m->outq), M_MIDI);
- mtx_destroy(&m->lock);
- free(m, M_MIDI);
- return 0;
-}
-
static void
midi_sysinit(void *data __unused)
{