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.