forked from Qortal/qortal
Synchronize arbitrary data list removals, as it seems that SynchronizedList and SynchronizedMap aren't overriding removeIf() with a thread-safe version.
This commit is contained in:
parent
0d0ccfd0ac
commit
e5f88fe2f4
@ -75,9 +75,13 @@ public class ArbitraryDataBuildManager extends Thread {
|
|||||||
if (now == null) {
|
if (now == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
synchronized (arbitraryDataBuildQueue) {
|
||||||
arbitraryDataBuildQueue.entrySet().removeIf(entry -> entry.getValue().hasReachedBuildTimeout(now));
|
arbitraryDataBuildQueue.entrySet().removeIf(entry -> entry.getValue().hasReachedBuildTimeout(now));
|
||||||
|
}
|
||||||
|
synchronized (arbitraryDataFailedBuilds) {
|
||||||
arbitraryDataFailedBuilds.entrySet().removeIf(entry -> entry.getValue().hasReachedFailureTimeout(now));
|
arbitraryDataFailedBuilds.entrySet().removeIf(entry -> entry.getValue().hasReachedFailureTimeout(now));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Build queue
|
// Build queue
|
||||||
|
|
||||||
|
@ -84,8 +84,10 @@ public class ArbitraryDataFileListManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final long requestMinimumTimestamp = now - ArbitraryDataManager.ARBITRARY_REQUEST_TIMEOUT;
|
final long requestMinimumTimestamp = now - ArbitraryDataManager.ARBITRARY_REQUEST_TIMEOUT;
|
||||||
|
synchronized (arbitraryDataFileListRequests) {
|
||||||
arbitraryDataFileListRequests.entrySet().removeIf(entry -> entry.getValue().getC() == null || entry.getValue().getC() < requestMinimumTimestamp);
|
arbitraryDataFileListRequests.entrySet().removeIf(entry -> entry.getValue().getC() == null || entry.getValue().getC() < requestMinimumTimestamp);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Track file list lookups by signature
|
// Track file list lookups by signature
|
||||||
|
@ -101,15 +101,23 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final long requestMinimumTimestamp = now - ArbitraryDataManager.getInstance().ARBITRARY_REQUEST_TIMEOUT;
|
final long requestMinimumTimestamp = now - ArbitraryDataManager.getInstance().ARBITRARY_REQUEST_TIMEOUT;
|
||||||
|
synchronized (arbitraryDataFileRequests) {
|
||||||
arbitraryDataFileRequests.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue() < requestMinimumTimestamp);
|
arbitraryDataFileRequests.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue() < requestMinimumTimestamp);
|
||||||
|
}
|
||||||
|
|
||||||
final long relayMinimumTimestamp = now - ArbitraryDataManager.getInstance().ARBITRARY_RELAY_TIMEOUT;
|
final long relayMinimumTimestamp = now - ArbitraryDataManager.getInstance().ARBITRARY_RELAY_TIMEOUT;
|
||||||
|
synchronized (arbitraryRelayMap) {
|
||||||
arbitraryRelayMap.removeIf(entry -> entry == null || entry.getTimestamp() == null || entry.getTimestamp() < relayMinimumTimestamp);
|
arbitraryRelayMap.removeIf(entry -> entry == null || entry.getTimestamp() == null || entry.getTimestamp() < relayMinimumTimestamp);
|
||||||
|
}
|
||||||
|
synchronized (arbitraryDataFileHashResponses) {
|
||||||
arbitraryDataFileHashResponses.removeIf(entry -> entry.getTimestamp() < relayMinimumTimestamp);
|
arbitraryDataFileHashResponses.removeIf(entry -> entry.getTimestamp() < relayMinimumTimestamp);
|
||||||
|
}
|
||||||
|
|
||||||
final long directConnectionInfoMinimumTimestamp = now - ArbitraryDataManager.getInstance().ARBITRARY_DIRECT_CONNECTION_INFO_TIMEOUT;
|
final long directConnectionInfoMinimumTimestamp = now - ArbitraryDataManager.getInstance().ARBITRARY_DIRECT_CONNECTION_INFO_TIMEOUT;
|
||||||
|
synchronized (directConnectionInfo) {
|
||||||
directConnectionInfo.removeIf(entry -> entry.getTimestamp() < directConnectionInfoMinimumTimestamp);
|
directConnectionInfo.removeIf(entry -> entry.getTimestamp() < directConnectionInfoMinimumTimestamp);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -484,8 +492,10 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void removeFromRelayMap(ArbitraryRelayInfo entry) {
|
private void removeFromRelayMap(ArbitraryRelayInfo entry) {
|
||||||
|
synchronized (arbitraryRelayMap) {
|
||||||
arbitraryRelayMap.removeIf(relayInfo -> relayInfo.equals(entry));
|
arbitraryRelayMap.removeIf(relayInfo -> relayInfo.equals(entry));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Network handlers
|
// Network handlers
|
||||||
|
@ -56,8 +56,10 @@ public class ArbitraryDataRenderManager extends Thread {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final long minimumTimestamp = now - AUTHORIZATION_TIMEOUT;
|
final long minimumTimestamp = now - AUTHORIZATION_TIMEOUT;
|
||||||
|
synchronized (this.authorizedResources) {
|
||||||
this.authorizedResources.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue() < minimumTimestamp);
|
this.authorizedResources.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue() < minimumTimestamp);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isAuthorized(ArbitraryDataResource resource) {
|
public boolean isAuthorized(ArbitraryDataResource resource) {
|
||||||
ArbitraryDataResource broadResource = new ArbitraryDataResource(resource.getResourceId(), null, null, null);
|
ArbitraryDataResource broadResource = new ArbitraryDataResource(resource.getResourceId(), null, null, null);
|
||||||
|
@ -73,8 +73,10 @@ public class ArbitraryMetadataManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final long requestMinimumTimestamp = now - ArbitraryDataManager.ARBITRARY_REQUEST_TIMEOUT;
|
final long requestMinimumTimestamp = now - ArbitraryDataManager.ARBITRARY_REQUEST_TIMEOUT;
|
||||||
|
synchronized (arbitraryMetadataRequests) {
|
||||||
arbitraryMetadataRequests.entrySet().removeIf(entry -> entry.getValue().getC() == null || entry.getValue().getC() < requestMinimumTimestamp);
|
arbitraryMetadataRequests.entrySet().removeIf(entry -> entry.getValue().getC() == null || entry.getValue().getC() < requestMinimumTimestamp);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public ArbitraryDataTransactionMetadata fetchMetadata(ArbitraryDataResource arbitraryDataResource, boolean useRateLimiter) {
|
public ArbitraryDataTransactionMetadata fetchMetadata(ArbitraryDataResource arbitraryDataResource, boolean useRateLimiter) {
|
||||||
|
Loading…
Reference in New Issue
Block a user