diff --git a/sys/netgraph/netgraph/ng_base.c b/sys/netgraph/netgraph/ng_base.c --- a/sys/netgraph/netgraph/ng_base.c +++ b/sys/netgraph/netgraph/ng_base.c @@ -395,8 +395,10 @@ return (ENOMEM); } node->type = type; + crit_enter(); node->refs++; /* note reference */ type->refs++; + crit_exit(); /* Link us into the node linked list */ LIST_INSERT_HEAD(&nodelist, node, nodes); @@ -1769,7 +1771,9 @@ /* Call type specific code */ if (type->mod_event != NULL) if ((error = (*type->mod_event)(mod, event, data))) { - type->refs--; /* undo it */ + crit_enter(); + type->refs--; /* undo it */ + crit_exit(); LIST_REMOVE(type, types); } crit_exit();