mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-19 10:53:58 +00:00
- Plugging a memory leak when malloc() failed during initialisation;
- Plugging another memory leak inside the destructor. Reviewed by: matk MFC after: 3 weeks
This commit is contained in:
parent
d818f2b6b9
commit
671b575901
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=289888
@ -319,6 +319,8 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
|
||||
goto err0;
|
||||
|
||||
m->synth = malloc(sizeof(*m->synth), M_MIDI, M_NOWAIT | M_ZERO);
|
||||
if (m->synth == NULL)
|
||||
goto err1;
|
||||
kobj_init((kobj_t)m->synth, &midisynth_class);
|
||||
m->synth->m = m;
|
||||
kobj_init((kobj_t)m, cls);
|
||||
@ -327,7 +329,7 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
|
||||
|
||||
MIDI_DEBUG(1, printf("midiinit queues %d/%d.\n", inqsize, outqsize));
|
||||
if (!inqsize && !outqsize)
|
||||
goto err1;
|
||||
goto err2;
|
||||
|
||||
mtx_init(&m->lock, "raw midi", NULL, 0);
|
||||
mtx_init(&m->qlock, "q raw midi", NULL, 0);
|
||||
@ -352,7 +354,7 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
|
||||
|
||||
if ((inqsize && !MIDIQ_BUF(m->inq)) ||
|
||||
(outqsize && !MIDIQ_BUF(m->outq)))
|
||||
goto err2;
|
||||
goto err3;
|
||||
|
||||
|
||||
m->busy = 0;
|
||||
@ -362,7 +364,7 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
|
||||
m->cookie = cookie;
|
||||
|
||||
if (MPU_INIT(m, cookie))
|
||||
goto err2;
|
||||
goto err3;
|
||||
|
||||
mtx_unlock(&m->lock);
|
||||
mtx_unlock(&m->qlock);
|
||||
@ -378,13 +380,14 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
|
||||
|
||||
return m;
|
||||
|
||||
err2: mtx_destroy(&m->qlock);
|
||||
err3: mtx_destroy(&m->qlock);
|
||||
mtx_destroy(&m->lock);
|
||||
|
||||
if (MIDIQ_BUF(m->inq))
|
||||
free(MIDIQ_BUF(m->inq), M_MIDI);
|
||||
if (MIDIQ_BUF(m->outq))
|
||||
free(MIDIQ_BUF(m->outq), M_MIDI);
|
||||
err2: free(m->synth, M_MIDI);
|
||||
err1: free(m, M_MIDI);
|
||||
err0: mtx_unlock(&midistat_lock);
|
||||
MIDI_DEBUG(1, printf("midi_init ended in error\n"));
|
||||
@ -1388,6 +1391,7 @@ midi_destroy(struct snd_midi *m, int midiuninit)
|
||||
free(MIDIQ_BUF(m->outq), M_MIDI);
|
||||
mtx_destroy(&m->qlock);
|
||||
mtx_destroy(&m->lock);
|
||||
free(m->synth, M_MIDI);
|
||||
free(m, M_MIDI);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user