Don't panic due to unlocking an unowned mutex if we fail during attach.

PR:		kern/139053
Reviewed by:	scottl
Approved by:	ed (mentor)
MFC after:	2 weeks
This commit is contained in:
gavin 2009-12-17 17:46:08 +00:00
parent a34926abd3
commit 0768a69095

View File

@ -418,6 +418,7 @@ ciss_attach(device_t dev)
sc = device_get_softc(dev); sc = device_get_softc(dev);
sc->ciss_dev = dev; sc->ciss_dev = dev;
mtx_init(&sc->ciss_mtx, "cissmtx", NULL, MTX_DEF);
/* /*
* Do PCI-specific init. * Do PCI-specific init.
@ -430,7 +431,6 @@ ciss_attach(device_t dev)
*/ */
ciss_initq_free(sc); ciss_initq_free(sc);
ciss_initq_notify(sc); ciss_initq_notify(sc);
mtx_init(&sc->ciss_mtx, "cissmtx", NULL, MTX_DEF);
callout_init_mtx(&sc->ciss_periodic, &sc->ciss_mtx, 0); callout_init_mtx(&sc->ciss_periodic, &sc->ciss_mtx, 0);
/* /*
@ -496,8 +496,11 @@ ciss_attach(device_t dev)
error = 0; error = 0;
out: out:
if (error != 0) if (error != 0) {
/* ciss_free() expects the mutex to be held */
mtx_lock(&sc->ciss_mtx);
ciss_free(sc); ciss_free(sc);
}
return(error); return(error);
} }