diff options
Diffstat (limited to 'sys/netinet/if_atm.c')
| -rw-r--r-- | sys/netinet/if_atm.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/netinet/if_atm.c b/sys/netinet/if_atm.c index 8093f9ae7174..d37a3908d7a1 100644 --- a/sys/netinet/if_atm.c +++ b/sys/netinet/if_atm.c @@ -144,6 +144,9 @@ atm_rtrequest(int req, struct rtentry *rt, struct rt_addrinfo *info) * Parse and verify the link level address as * an open request */ +#ifdef NATM + NATM_LOCK(); +#endif bzero(&op, sizeof(op)); addr = LLADDR(SDL(gate)); alen = SDL(gate)->sdl_alen; @@ -247,6 +250,9 @@ atm_rtrequest(int req, struct rtentry *rt, struct rt_addrinfo *info) SDL(gate)->sdl_type = rt->rt_ifp->if_type; SDL(gate)->sdl_index = rt->rt_ifp->if_index; +#ifdef NATM + NATM_UNLOCK(); +#endif break; failed: @@ -256,6 +262,7 @@ failed: rt->rt_llinfo = NULL; rt->rt_flags &= ~RTF_LLINFO; } + NATM_UNLOCK(); #endif /* mark as invalid. We cannot RTM_DELETE the route from * here, because the recursive call to rtrequest1 does @@ -269,10 +276,12 @@ failed: * tell native ATM we are done with this VC */ if (rt->rt_flags & RTF_LLINFO) { + NATM_LOCK(); npcb_free((struct natmpcb *)rt->rt_llinfo, NPCB_DESTROY); rt->rt_llinfo = NULL; rt->rt_flags &= ~RTF_LLINFO; + NATM_UNLOCK(); } #endif /* |
