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,6 +174,7 @@ public abstract class serverAbstractSwitch implements serverSwitch {
if (accessPath == null) accessPath="NULL";
TreeMap access = (TreeMap) accessTracker.get(host);
if (access == null) access = new TreeMap();
synchronized (access) {
access.put(new Long(System.currentTimeMillis()), accessPath);
// write back to tracker
@ -181,13 +182,14 @@ public abstract class serverAbstractSwitch implements serverSwitch {
accessTracker.put(host, clearTooOldAccess(access));
} catch (ConcurrentModificationException e) {};
}
}
public TreeMap accessTrack(String host) {
// returns mapping from Long(accesstime) to path
TreeMap access = (TreeMap) accessTracker.get(host);
if (access == null) return null;
synchronized (access) {
// clear too old entries
int oldsize = access.size();
if ((access = clearTooOldAccess(access)).size() != oldsize) {
@ -201,6 +203,7 @@ public abstract class serverAbstractSwitch implements serverSwitch {
return access;
}
}
private TreeMap clearTooOldAccess(TreeMap access) {
return new TreeMap(access.tailMap(new Long(System.currentTimeMillis() - maxTrackingTime)));

Loading…
Cancel
Save