--- a/sys/netgraph7/netgraph/ng_base.c +++ b/sys/netgraph7/netgraph/ng_base.c @@ -3063,7 +3063,10 @@ NG_HOOK_NOT_VALID(hook) || NG_HOOK_NOT_VALID(peer = NG_HOOK_PEER(hook)) || NG_NODE_NOT_VALID(peernode = NG_PEER_NODE(hook))) { - NG_FREE_ITEM(item); + if (item->refs == 0) + ng_free_item(item); + else + NG_FREE_ITEM(item); TRAP_ERROR(); return (ENETDOWN); } @@ -3093,7 +3096,10 @@ */ error = ng_path2noderef(here, address, &dest, &hook); if (error) { - NG_FREE_ITEM(item); + if (item->refs == 0) + ng_free_item(item); + else + NG_FREE_ITEM(item); return (error); } NGI_SET_NODE(item, dest); @@ -3116,7 +3122,10 @@ */ dest = ng_ID2noderef(ID); /* GETS REFERENCE! */ if (dest == NULL) { - NG_FREE_ITEM(item); + if (item->refs == 0) + ng_free_item(item); + else + NG_FREE_ITEM(item); TRAP_ERROR(); return(EINVAL); }