diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index beacfff3cc9a..dba041fc7a62 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -779,10 +779,16 @@ destroy_devl(struct cdev *dev) void destroy_dev(struct cdev *dev) { + struct cdevsw *csw; dev_lock(); - destroy_devl(dev); - dev_unlock_and_free(); + csw = dev->si_devsw; + if ((csw != NULL && csw->d_purge != NULL) || + dev->si_threadcount == 0) { + destroy_devl(dev); + dev_unlock_and_free(); + } else + destroy_dev_sched(dev); } const char *