Scan the list in reverse order for the shutdown handlers of loaded modules.

This way, when there is a dependency between two modules, the handler of the
latter probed runs first.

This is a similar approach as the modules are unloaded in the same
linkerfile.

Sponsored by:	Sandvine Incorporated
Submitted by:	Nima Misaghian <nmisaghian at sandvine dot com>
MFC after:	1 week
This commit is contained in:
Attilio Rao 2010-11-19 19:43:56 +00:00
parent 2e7758a8f6
commit 772753491b

View File

@ -46,7 +46,7 @@ __FBSDID("$FreeBSD$");
static MALLOC_DEFINE(M_MODULE, "module", "module data structures");
typedef TAILQ_HEAD(, module) modulelist_t;
typedef TAILQ_HEAD(modulelst, module) modulelist_t;
struct module {
TAILQ_ENTRY(module) link; /* chain together all modules */
TAILQ_ENTRY(module) flink; /* all modules in a file */
@ -101,7 +101,7 @@ module_shutdown(void *arg1, int arg2)
return;
mtx_lock(&Giant);
MOD_SLOCK;
TAILQ_FOREACH(mod, &modules, link)
TAILQ_FOREACH_REVERSE(mod, &modules, modulelst, link)
MOD_EVENT(mod, MOD_SHUTDOWN);
MOD_SUNLOCK;
mtx_unlock(&Giant);