]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
wireguard: reuse sd_event_source object
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 1 Mar 2019 06:41:47 +0000 (15:41 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 13 Mar 2019 02:59:18 +0000 (11:59 +0900)
src/network/netdev/wireguard.c
src/network/netdev/wireguard.h

index 3560c25eecd9fd70ddade51b8eb03f5ebce01554..44e7aa61098a2d56088443b30d07459308dd2dd2 100644 (file)
@@ -9,6 +9,7 @@
 #include "sd-resolve.h"
 
 #include "alloc-util.h"
+#include "event-util.h"
 #include "fd-util.h"
 #include "hexdecoct.h"
 #include "netlink-util.h"
@@ -371,29 +372,17 @@ resolve_next:
         (void) wireguard_set_interface(netdev);
 
         if (!set_isempty(w->peers_with_failed_endpoint)) {
-                _cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
+                usec_t usec;
 
                 w->n_retries++;
-                r = sd_event_add_time(netdev->manager->event,
-                                      &s,
-                                      CLOCK_MONOTONIC,
-                                      now(CLOCK_MONOTONIC) + exponential_backoff_milliseconds(w->n_retries),
-                                      0,
-                                      on_resolve_retry,
-                                      netdev);
+                usec = usec_add(now(CLOCK_MONOTONIC), exponential_backoff_milliseconds(w->n_retries));
+                r = event_reset_time(netdev->manager->event, &w->resolve_retry_event_source,
+                                     CLOCK_MONOTONIC, usec, 0, on_resolve_retry, netdev,
+                                     0, "wireguard-resolve-retry", true);
                 if (r < 0) {
                         log_netdev_warning_errno(netdev, r, "Could not arm resolve retry handler: %m");
                         return 0;
                 }
-
-                r = sd_event_source_set_destroy_callback(s, (sd_event_destroy_t) netdev_destroy_callback);
-                if (r < 0) {
-                        log_netdev_warning_errno(netdev, r, "Failed to set destroy callback to event source: %m");
-                        return 0;
-                }
-
-                (void) sd_event_source_set_floating(s, true);
-                netdev_ref(netdev);
         }
 
         return 0;
@@ -815,6 +804,8 @@ static void wireguard_done(NetDev *netdev) {
         w = WIREGUARD(netdev);
         assert(w);
 
+        sd_event_source_unref(w->resolve_retry_event_source);
+
         hashmap_free_with_destructor(w->peers_by_section, wireguard_peer_free);
         set_free(w->peers_with_unresolved_endpoint);
         set_free(w->peers_with_failed_endpoint);
index 72e895bf43451512c6ddb7da4fbc030406bfbc90..65e9ac24b9a3170a8aed7bb5f7201dbe3ed59862 100644 (file)
@@ -48,6 +48,7 @@ struct Wireguard {
         LIST_HEAD(WireguardPeer, peers);
 
         unsigned n_retries;
+        sd_event_source *resolve_retry_event_source;
 };
 
 DEFINE_NETDEV_CAST(WIREGUARD, Wireguard);