summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_conf.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_conf.c')
-rw-r--r--sys/kern/kern_conf.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index beacfff..dba041f 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 *
OpenPOWER on IntegriCloud