diff options
author | peter <peter@FreeBSD.org> | 2000-04-29 13:24:35 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2000-04-29 13:24:35 +0000 |
commit | 33bb245bde53a528be82af3253e2b0b5197773ba (patch) | |
tree | 1a36c164952ccca25f30c38efcc70fc9b6460fa2 /sys/kern/subr_bus.c | |
parent | 8de950a22b47f2a5a632e462ab0d4818247b2bdf (diff) | |
download | FreeBSD-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.c | 1 |
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; |