diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c --- a/sys/kern/kern_linker.c +++ b/sys/kern/kern_linker.c @@ -777,12 +777,6 @@ } TAILQ_REMOVE(&linker_files, file, link); - if (file->deps) { - for (i = 0; i < file->ndeps; i++) - linker_file_unload(file->deps[i], flags); - free(file->deps, M_LINKER); - file->deps = NULL; - } while ((cp = STAILQ_FIRST(&file->common)) != NULL) { STAILQ_REMOVE_HEAD(&file->common, link); free(cp, M_LINKER); @@ -794,6 +788,12 @@ EVENTHANDLER_INVOKE(kld_unload, file->filename, file->address, file->size); + if (file->deps) { + for (i = 0; i < file->ndeps; i++) + linker_file_unload(file->deps[i], flags); + free(file->deps, M_LINKER); + file->deps = NULL; + } if (file->filename) { free(file->filename, M_LINKER); file->filename = NULL;