mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-25 13:57:59 +01:00
Fix race condition where one server will respond first if it happens to be faster.
This commit is contained in:
parent
b0e30dbcdc
commit
2c592768d3
1 changed files with 6 additions and 4 deletions
|
@ -1,5 +1,6 @@
|
|||
package com.voxelmodpack.hdskins.skins;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
@ -22,8 +23,6 @@ public abstract class AbstractSkinServer implements SkinServer {
|
|||
protected static final ExecutorService skinDownloadExecutor = Executors.newCachedThreadPool();
|
||||
protected static final ListeningExecutorService skinUploadExecutor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
|
||||
|
||||
public static final MinecraftTexturesPayload EMPTY_PAYLOAD = new MinecraftTexturesPayload();
|
||||
|
||||
private LoadingCache<GameProfile, Optional<MinecraftTexturesPayload>> skins = CacheBuilder.newBuilder()
|
||||
.initialCapacity(20)
|
||||
.maximumSize(100)
|
||||
|
@ -32,7 +31,11 @@ public abstract class AbstractSkinServer implements SkinServer {
|
|||
|
||||
@Override
|
||||
public Optional<MinecraftTexturesPayload> load(GameProfile key) {
|
||||
return loadProfileData(key);
|
||||
Preconditions.checkNotNull(key, "profile cannot be null");
|
||||
// prevent race condition where one server responds faster than the previous one
|
||||
synchronized (key) {
|
||||
return loadProfileData(key);
|
||||
}
|
||||
}
|
||||
}, Optional.empty(), skinDownloadExecutor));
|
||||
|
||||
|
@ -40,7 +43,6 @@ public abstract class AbstractSkinServer implements SkinServer {
|
|||
|
||||
@Override
|
||||
public final Optional<MinecraftTexturesPayload> getProfileData(GameProfile profile) {
|
||||
|
||||
boolean was = !skins.asMap().containsKey(profile);
|
||||
Optional<MinecraftTexturesPayload> textures = skins.getUnchecked(profile);
|
||||
// This is the initial value. Refreshing will load it syncronously.
|
||||
|
|
Loading…
Reference in a new issue