commit 61847e5660a4fea601244065dcb11afd97c64951
Author: Robert Hailey <git@osndok.com>
Date:   Thu Nov 4 17:43:48 2010 -0500

    bug: dont clobber our whole peer list if we only want to top it off

diff --git a/src/freenet/node/Announcer.java b/src/freenet/node/Announcer.java
index 3756966..42d8cb2 100644
--- a/src/freenet/node/Announcer.java
+++ b/src/freenet/node/Announcer.java
@@ -77,6 +77,10 @@ public class Announcer {
 		logMINOR = Logger.shouldLog(LogLevel.MINOR, this);
 	}
 
+	public boolean isRunning() {
+		return (runningAnnouncements!=0);
+	}
+
 	protected void start() {
 		if(!node.isOpennetEnabled()) return;
 		int darkPeers = node.peers.getDarknetPeers().length;
diff --git a/src/freenet/node/OpennetManager.java b/src/freenet/node/OpennetManager.java
index ac9f566..c26550e 100644
--- a/src/freenet/node/OpennetManager.java
+++ b/src/freenet/node/OpennetManager.java
@@ -400,6 +400,15 @@ public class OpennetManager {
 					timeLastOffered = System.currentTimeMillis();
 				notMany = true;
 				// Don't check timeLastAddedOldOpennetPeer, since we want it anyway. But do update it.
+			} else {
+				//list is full (or over-limit)
+				if (connectionType == ConnectionType.ANNOUNCE) {
+					//don't let announcements (that we create) clobber good peers
+					//e.g. if we start an announcement and get 12 responses, dont "start over" with a bunch of fresh peers
+					if (announcer.isRunning()) {
+						return false;
+					}
+				}
 			}
 			// Old opennet peers should only replace free slots / disconnected droppable nodes.
 			// We can make offers regardless of timeLastOffered provided they are disconnected droppable peers.
