Skip to content

Commit 5de8757

Browse files
committed
Ensure CTM's metadataCache is thread-safe
1 parent 4d54c62 commit 5de8757

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.embeddedt.modernfix.forge.mixin.bugfix.ctm_resourceutil_cme;
2+
3+
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
4+
import org.embeddedt.modernfix.annotation.RequiresMod;
5+
import org.spongepowered.asm.mixin.Final;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Mutable;
8+
import org.spongepowered.asm.mixin.Shadow;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Inject;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
12+
import team.chisel.ctm.client.util.ResourceUtil;
13+
14+
import java.util.Collections;
15+
import java.util.Map;
16+
import java.util.concurrent.ConcurrentMap;
17+
18+
@Mixin(ResourceUtil.class)
19+
@RequiresMod("ctm")
20+
@ClientOnlyMixin
21+
@SuppressWarnings({"rawtypes", "unchecked"})
22+
public class ResourceUtilMixin {
23+
@Shadow @Final @Mutable
24+
private static Map metadataCache;
25+
26+
/**
27+
* @author embeddedt
28+
* @reason quick fix to prevent rare CMEs
29+
*/
30+
@Inject(method = "<clinit>", at = @At("RETURN"))
31+
private static void synchronizeMetadataCache(CallbackInfo ci) {
32+
if(!(metadataCache instanceof ConcurrentMap))
33+
metadataCache = Collections.synchronizedMap(metadataCache);
34+
}
35+
}

0 commit comments

Comments
 (0)