diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index 1846fa7b13d0..f5d607757408 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -579,14 +579,14 @@ idestroy_dev(struct cdev *dev) } csw = dev->si_devsw; - dev->si_devsw = NULL; - while (csw->d_purge != NULL && dev->si_threadcount) { + dev->si_devsw = NULL; /* already NULL for SI_ALIAS */ + while (csw != NULL && csw->d_purge != NULL && dev->si_threadcount) { printf("Purging %lu threads from %s\n", dev->si_threadcount, devtoname(dev)); csw->d_purge(dev); msleep(csw, &devmtx, PRIBIO, "devprg", hz/10); } - if (csw->d_purge != NULL) + if (csw != NULL && csw->d_purge != NULL) printf("All threads purged from %s\n", devtoname(dev)); dev->si_drv1 = 0;