summaryrefslogtreecommitdiffstats
path: root/src/peer.c
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-11-18 01:23:21 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-11-18 01:23:21 +0100
commit16e2b0213b54991d9f493d4c0ee7efca18436427 (patch)
tree9a94d449dbefd95709e0c8993b9963e3ece88239 /src/peer.c
parent5082b5a4d2ec52b90e6d7ed178e462a6f0ff6f3e (diff)
downloadfastd-16e2b0213b54991d9f493d4c0ee7efca18436427.tar
fastd-16e2b0213b54991d9f493d4c0ee7efca18436427.zip
Clean up peer task handling
Diffstat (limited to 'src/peer.c')
-rw-r--r--src/peer.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/peer.c b/src/peer.c
index 9f26803..22339b4 100644
--- a/src/peer.c
+++ b/src/peer.c
@@ -364,13 +364,21 @@ void fastd_peer_handle_resolve(fastd_peer_t *peer, fastd_remote_t *remote, size_
init_handshake(peer);
}
-/** Schedules the peer maintenance task (or removes the schduled task if there's nothing to do) */
-void schedule_peer_task(fastd_peer_t *peer) {
- fastd_task_unschedule(&peer->task);
-
+/** Schedules the peer maintenance task (or removes the scheduled task if there's nothing to do) */
+static void schedule_peer_task(fastd_peer_t *peer) {
fastd_timeout_t timeout = fastd_timeout_min(peer->reset_timeout, peer->keepalive_timeout);
- if (timeout != fastd_timeout_inv)
+ if (timeout == fastd_timeout_inv) {
+ pr_debug2("Removing scheduled task for %P", peer);
+ fastd_task_unschedule(&peer->task);
+ }
+ else if (fastd_task_timeout(&peer->task) > timeout) {
+ pr_debug2("Replacing scheduled task for %P", peer);
+ fastd_task_unschedule(&peer->task);
fastd_task_schedule(&peer->task, TASK_TYPE_PEER, timeout);
+ }
+ else {
+ pr_debug2("Keeping scheduled task for %P", peer);
+ }
}
/** Initializes a peer */