summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_bus.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2000-04-29 13:24:35 +0000
committerpeter <peter@FreeBSD.org>2000-04-29 13:24:35 +0000
commit33bb245bde53a528be82af3253e2b0b5197773ba (patch)
tree1a36c164952ccca25f30c38efcc70fc9b6460fa2 /sys/kern/subr_bus.c
parent8de950a22b47f2a5a632e462ab0d4818247b2bdf (diff)
downloadFreeBSD-src-33bb245bde53a528be82af3253e2b0b5197773ba.zip
FreeBSD-src-33bb245bde53a528be82af3253e2b0b5197773ba.tar.gz
The newer module dependency code exposes an apparent bug in the
bus/driver/kobj system. I am not 100% sure that this is the correct fix, but it is harmless and does seem to solve the problem. At worst, it could cause a tiny memory leak at unload time - this is better than a free(NULL) and subsequent panic. I'm waiting for comments from Doug about this. This may yet be backed out and fixed differently. The change itself is to increment the reference count on drivers in one case where it appears to have been missed. When everything is unloaded, kobj_class_free() was being called twice in some cases, and panicing the second time.
Diffstat (limited to 'sys/kern/subr_bus.c')
-rw-r--r--sys/kern/subr_bus.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index 27edde9..22ad812 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -986,6 +986,7 @@ device_set_driver(device_t dev, driver_t *driver)
return ENOMEM;
}
bzero(dev->softc, driver->size);
+ driver->refs++;
} else
kobj_init((kobj_t) dev, &null_class);
return 0;
OpenPOWER on IntegriCloud