mirror of
https://github.com/yacy/yacy_search_server.git
synced 2025-07-21 09:04:37 -04:00
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
This commit is contained in:
@ -174,12 +174,14 @@ public abstract class serverAbstractSwitch implements serverSwitch {
|
||||
if (accessPath == null) accessPath="NULL";
|
||||
TreeMap access = (TreeMap) accessTracker.get(host);
|
||||
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
|
||||
try {
|
||||
accessTracker.put(host, clearTooOldAccess(access));
|
||||
} catch (ConcurrentModificationException e) {};
|
||||
// write back to tracker
|
||||
try {
|
||||
accessTracker.put(host, clearTooOldAccess(access));
|
||||
} catch (ConcurrentModificationException e) {};
|
||||
}
|
||||
}
|
||||
|
||||
public TreeMap accessTrack(String host) {
|
||||
@ -187,19 +189,20 @@ public abstract class serverAbstractSwitch implements serverSwitch {
|
||||
|
||||
TreeMap access = (TreeMap) accessTracker.get(host);
|
||||
if (access == null) return null;
|
||||
|
||||
// clear too old entries
|
||||
int oldsize = access.size();
|
||||
if ((access = clearTooOldAccess(access)).size() != oldsize) {
|
||||
// write back to tracker
|
||||
if (access.size() == 0) {
|
||||
accessTracker.remove(host);
|
||||
} else {
|
||||
accessTracker.put(host, access);
|
||||
synchronized (access) {
|
||||
// clear too old entries
|
||||
int oldsize = access.size();
|
||||
if ((access = clearTooOldAccess(access)).size() != oldsize) {
|
||||
// write back to tracker
|
||||
if (access.size() == 0) {
|
||||
accessTracker.remove(host);
|
||||
} else {
|
||||
accessTracker.put(host, access);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return access;
|
||||
return access;
|
||||
}
|
||||
}
|
||||
|
||||
private TreeMap clearTooOldAccess(TreeMap access) {
|
||||
|
Reference in New Issue
Block a user