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.

Reply via email to