From 5946c35a885d1fe32f5fcf3d27f3d62a71a92367 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 4 Feb 2009 14:16:36 +0000
Subject: [PATCH] avoid illegalstateexception

---
 router/java/src/net/i2p/router/Shitlist.java | 29 ++++++++++++--------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/router/java/src/net/i2p/router/Shitlist.java b/router/java/src/net/i2p/router/Shitlist.java
index 4f866c7f7..29d384de9 100644
--- a/router/java/src/net/i2p/router/Shitlist.java
+++ b/router/java/src/net/i2p/router/Shitlist.java
@@ -61,25 +61,32 @@ public class Shitlist {
     }
     
     private class Cleanup extends JobImpl {
+        private List<Hash> _toUnshitlist;
         public Cleanup(RouterContext ctx) {
             super(ctx);
+            _toUnshitlist = new ArrayList(4);
             getTiming().setStartAfter(ctx.clock().now() + SHITLIST_CLEANER_START_DELAY);
         }
         public String getName() { return "Cleanup shitlist"; }
         public void runJob() {
+            _toUnshitlist.clear();
             long now = getContext().clock().now();
-            for (Iterator iter = _entries.entrySet().iterator(); iter.hasNext(); ) {
-                Map.Entry<Hash, Entry> e = (Map.Entry) iter.next();
-                if (e.getValue().expireOn <= now) {
-                    iter.remove();
-                    Hash peer = e.getKey();
-                    PeerProfile prof = _context.profileOrganizer().getProfile(peer);
-                    if (prof != null)
-                        prof.unshitlist();
-                    _context.messageHistory().unshitlist(peer);
-                    if (_log.shouldLog(Log.INFO))
-                        _log.info("Unshitlisting router (expired) " + peer.toBase64());
+            try {
+                for (Iterator iter = _entries.entrySet().iterator(); iter.hasNext(); ) {
+                    Map.Entry<Hash, Entry> e = (Map.Entry) iter.next();
+                    if (e.getValue().expireOn <= now) {
+                        iter.remove();
+                        _toUnshitlist.add(e.getKey());
+                    }
                 }
+            } catch (IllegalStateException ise) {} // next time...
+            for (Hash peer : _toUnshitlist) {
+                PeerProfile prof = _context.profileOrganizer().getProfile(peer);
+                if (prof != null)
+                    prof.unshitlist();
+                _context.messageHistory().unshitlist(peer);
+                if (_log.shouldLog(Log.INFO))
+                    _log.info("Unshitlisting router (expired) " + peer.toBase64());
             }
             
             requeue(30*1000);
-- 
GitLab