synchronization of access tracker to avoid java-internal loop in TreeMap during shutdown

see http://forum.yacy-websuche.de/viewtopic.php?p=1178#p1178

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4017 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 18 years ago
parent beb2e062a7
commit 757703a938

@ -174,12 +174,14 @@ public abstract class serverAbstractSwitch implements serverSwitch {
if (accessPath == null) accessPath="NULL"; if (accessPath == null) accessPath="NULL";
TreeMap access = (TreeMap) accessTracker.get(host); TreeMap access = (TreeMap) accessTracker.get(host);
if (access == null) access = new TreeMap(); if (access == null) access = new TreeMap();
access.put(new Long(System.currentTimeMillis()), accessPath); synchronized (access) {
access.put(new Long(System.currentTimeMillis()), accessPath);
// write back to tracker // write back to tracker
try { try {
accessTracker.put(host, clearTooOldAccess(access)); accessTracker.put(host, clearTooOldAccess(access));
} catch (ConcurrentModificationException e) {}; } catch (ConcurrentModificationException e) {};
}
} }
public TreeMap accessTrack(String host) { public TreeMap accessTrack(String host) {
@ -187,19 +189,20 @@ public abstract class serverAbstractSwitch implements serverSwitch {
TreeMap access = (TreeMap) accessTracker.get(host); TreeMap access = (TreeMap) accessTracker.get(host);
if (access == null) return null; if (access == null) return null;
synchronized (access) {
// clear too old entries // clear too old entries
int oldsize = access.size(); int oldsize = access.size();
if ((access = clearTooOldAccess(access)).size() != oldsize) { if ((access = clearTooOldAccess(access)).size() != oldsize) {
// write back to tracker // write back to tracker
if (access.size() == 0) { if (access.size() == 0) {
accessTracker.remove(host); accessTracker.remove(host);
} else { } else {
accessTracker.put(host, access); accessTracker.put(host, access);
}
} }
}
return access; return access;
}
} }
private TreeMap clearTooOldAccess(TreeMap access) { private TreeMap clearTooOldAccess(TreeMap access) {

Loading…
Cancel
Save