mirror of
https://github.com/opnsense/src.git
synced 2026-02-22 01:11:30 -05:00
Fix (another, more to come) ivar memory leak during driver detach.
This commit is contained in:
parent
fa21517ed8
commit
d2ea76fe8f
1 changed files with 17 additions and 9 deletions
|
|
@ -339,23 +339,31 @@ csa_detach(device_t dev)
|
|||
{
|
||||
csa_res *resp;
|
||||
sc_p scp;
|
||||
struct sndcard_func *func;
|
||||
int err;
|
||||
|
||||
scp = device_get_softc(dev);
|
||||
resp = &scp->res;
|
||||
|
||||
err = 0;
|
||||
if (scp->midi != NULL)
|
||||
if (scp->midi != NULL) {
|
||||
func = device_get_ivars(scp->midi);
|
||||
err = device_delete_child(dev, scp->midi);
|
||||
if (err)
|
||||
return err;
|
||||
scp->midi = NULL;
|
||||
if (err != 0)
|
||||
return err;
|
||||
if (func != NULL)
|
||||
free(func, M_DEVBUF);
|
||||
scp->midi = NULL;
|
||||
}
|
||||
|
||||
if (scp->pcm != NULL)
|
||||
if (scp->pcm != NULL) {
|
||||
func = device_get_ivars(scp->pcm);
|
||||
err = device_delete_child(dev, scp->pcm);
|
||||
if (err)
|
||||
return err;
|
||||
scp->pcm = NULL;
|
||||
if (err != 0)
|
||||
return err;
|
||||
if (func != NULL)
|
||||
free(func, M_DEVBUF);
|
||||
scp->pcm = NULL;
|
||||
}
|
||||
|
||||
bus_teardown_intr(dev, resp->irq, scp->ih);
|
||||
bus_release_resource(dev, SYS_RES_IRQ, resp->irq_rid, resp->irq);
|
||||
|
|
|
|||
Loading…
Reference in a new issue