diff options
| author | Ian Dowse <iedowse@FreeBSD.org> | 2006-06-25 12:36:21 +0000 |
|---|---|---|
| committer | Ian Dowse <iedowse@FreeBSD.org> | 2006-06-25 12:36:21 +0000 |
| commit | 450ec4ed45edc6e62e374a1fdd23e0dbe204fdb8 (patch) | |
| tree | 5e7c61846a974bdcfb8efc1377fafb9d23ccd1a5 /sys/kern/subr_firmware.c | |
| parent | dacf5a7a79cfea706631253689a84e0bdbb79bb5 (diff) | |
Notes
Diffstat (limited to 'sys/kern/subr_firmware.c')
| -rw-r--r-- | sys/kern/subr_firmware.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/kern/subr_firmware.c b/sys/kern/subr_firmware.c index 3f7fb64145ec..6de4fa455104 100644 --- a/sys/kern/subr_firmware.c +++ b/sys/kern/subr_firmware.c @@ -205,7 +205,7 @@ unloadentry(void *unused1, int unused2) { struct firmware *fp; linker_file_t file; - int i; + int i, err; mtx_lock(&firmware_mtx); for (;;) { @@ -225,9 +225,19 @@ unloadentry(void *unused1, int unused2) fp->file = NULL; mtx_unlock(&firmware_mtx); - linker_release_module(NULL, NULL, file); + err = linker_release_module(NULL, NULL, file); mtx_lock(&firmware_mtx); + if (err) { + /* + * If linker_release_module() failed then we still + * hold a reference on the module so it should not be + * possible for it to go away or be re-registered. + */ + KASSERT(fp->file == NULL, + ("firmware entry reused while referenced!")); + fp->file = file; + } } mtx_unlock(&firmware_mtx); } |
