aboutsummaryrefslogtreecommitdiff
path: root/sys/kern
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2007-07-03 17:43:20 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2007-07-03 17:43:20 +0000
commit6f0281937b9d3d53443f39c2d22e5cade9fcba83 (patch)
treeea5abb062e51017d7bdbac9815981ab1438cd85f /sys/kern
parentde10ffa527504dff12f2ba6e4b345dc719f71e6e (diff)
Notes
Diffstat (limited to 'sys/kern')
-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 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 *