diff options
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/netinet/libalias/alias_db.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/sys/netinet/libalias/alias_db.c b/sys/netinet/libalias/alias_db.c index 41f0a328daec..bc567ad2d918 100644 --- a/sys/netinet/libalias/alias_db.c +++ b/sys/netinet/libalias/alias_db.c @@ -33,6 +33,7 @@ #include <sys/systm.h> #include <sys/lock.h> #include <sys/module.h> +#include <sys/mutex.h> #include <sys/rwlock.h> #include <sys/stdarg.h> #include <sys/syslog.h> @@ -61,6 +62,10 @@ #include "alias_db.h" +#ifdef _KERNEL +static struct mtx list_mtx; +MTX_SYSINIT(libalias_list, &list_mtx, "libalias list lock", MTX_DEF); +#endif static LIST_HEAD(, libalias) instancehead = LIST_HEAD_INITIALIZER(instancehead); int LibAliasTime; @@ -2191,7 +2196,13 @@ LibAliasInit(struct libalias *la) if (LIST_EMPTY(&instancehead)) atexit(finishoff); #endif +#ifdef _KERNEL + mtx_lock(&list_mtx); +#endif LIST_INSERT_HEAD(&instancehead, la, instancelist); +#ifdef _KERNEL + mtx_unlock(&list_mtx); +#endif #ifdef _KERNEL LibAliasTime = time_uptime; @@ -2260,7 +2271,13 @@ LibAliasUninit(struct libalias *la) #ifndef NO_FW_PUNCH UninitPunchFW(la); #endif +#ifdef _KERNEL + mtx_lock(&list_mtx); +#endif LIST_REMOVE(la, instancelist); +#ifdef _KERNEL + mtx_unlock(&list_mtx); +#endif LIBALIAS_UNLOCK(la); LIBALIAS_LOCK_DESTROY(la); free(la); |
