diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2007-07-03 17:43:20 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2007-07-03 17:43:20 +0000 |
| commit | 6f0281937b9d3d53443f39c2d22e5cade9fcba83 (patch) | |
| tree | ea5abb062e51017d7bdbac9815981ab1438cd85f /sys/kern | |
| parent | de10ffa527504dff12f2ba6e4b345dc719f71e6e (diff) | |
Notes
Diffstat (limited to 'sys/kern')
| -rw-r--r-- | sys/kern/kern_conf.c | 10 |
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 * |
