Reduce code duplication by introducing unref_icmp6ev() OK?
diff --git frontend.c frontend.c index 624ff5562f3..4b3f575611e 100644 --- frontend.c +++ frontend.c @@ -92,6 +92,7 @@ void get_lladdr(char *, struct ether_addr *, struct sockaddr_in6 *); struct iface *get_iface_by_id(uint32_t); void remove_iface(uint32_t); struct icmp6_ev *get_icmp6ev_by_rdomain(int); +void unref_icmp6ev(struct iface *); void set_icmp6sock(int, int); void send_solicitation(uint32_t); #ifndef SMALL @@ -519,15 +520,7 @@ update_iface(uint32_t if_index, char* if_name) if (iface != NULL) { if (iface->rdomain != ifrdomain) { - if (iface->icmp6ev != NULL) { - iface->icmp6ev->refcnt--; - if (iface->icmp6ev->refcnt == 0) { - event_del(&iface->icmp6ev->ev); - close(EVENT_FD(&iface->icmp6ev->ev)); - free(iface->icmp6ev); - } - iface->icmp6ev = NULL; - } + unref_icmp6ev(iface); iface->rdomain = ifrdomain; iface->icmp6ev = get_icmp6ev_by_rdomain(ifrdomain); } @@ -1102,14 +1095,7 @@ remove_iface(uint32_t if_index) LIST_REMOVE(iface, entries); - if (iface->icmp6ev != NULL) { - iface->icmp6ev->refcnt--; - if (iface->icmp6ev->refcnt == 0) { - event_del(&iface->icmp6ev->ev); - close(EVENT_FD(&iface->icmp6ev->ev)); - free(iface->icmp6ev); - } - } + unref_icmp6ev(iface); free(iface); } @@ -1148,6 +1134,20 @@ get_icmp6ev_by_rdomain(int rdomain) return (icmp6ev); } +void +unref_icmp6ev(struct iface *iface) +{ + if (iface->icmp6ev != NULL) { + iface->icmp6ev->refcnt--; + if (iface->icmp6ev->refcnt == 0) { + event_del(&iface->icmp6ev->ev); + close(EVENT_FD(&iface->icmp6ev->ev)); + free(iface->icmp6ev); + } + iface->icmp6ev = NULL; + } +} + void set_icmp6sock(int icmp6sock, int rdomain) { -- 2.29.2 -- I'm not entirely sure you are real.