From 6c4c0926c5a21efdcc0b8fb77b0c84f0aa152f24 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Thu, 25 Apr 2013 14:57:32 +0100
Subject: [PATCH] Randomise initial polling intervals to spread out connection
 attempts.

---
 briar-core/src/net/sf/briar/plugins/PollerImpl.java | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/briar-core/src/net/sf/briar/plugins/PollerImpl.java b/briar-core/src/net/sf/briar/plugins/PollerImpl.java
index 204547f1c9..c5ea77feab 100644
--- a/briar-core/src/net/sf/briar/plugins/PollerImpl.java
+++ b/briar-core/src/net/sf/briar/plugins/PollerImpl.java
@@ -36,14 +36,16 @@ class PollerImpl implements Poller, Runnable {
 	}
 
 	public synchronized void start(Collection<Plugin> plugins) {
-		for(Plugin plugin : plugins) schedule(plugin);
+		for(Plugin plugin : plugins) schedule(plugin, true);
 		new Thread(this, "Poller").start();
 	}
 
-	private synchronized void schedule(Plugin plugin) {
+	private synchronized void schedule(Plugin plugin, boolean randomise) {
 		if(plugin.shouldPoll()) {
 			long now = clock.currentTimeMillis();
 			long interval = plugin.getPollingInterval();
+			// Randomise intervals at startup to spread out connection attempts
+			if(randomise) interval = (long) (interval * Math.random());
 			pollTimes.add(new PollTime(now + interval, plugin));
 		}
 	}
@@ -74,7 +76,7 @@ class PollerImpl implements Poller, Runnable {
 							p.plugin.poll(connected);
 						}
 					});
-					schedule(p.plugin);
+					schedule(p.plugin, false);
 				} else {
 					try {
 						wait(p.time - now);
-- 
GitLab