aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRaven Szewczyk <git@eigenraven.me>2023-04-07 21:00:21 +0100
committerGitHub <noreply@github.com>2023-04-07 22:00:21 +0200
commitc4f06e08d3013800c75198023b4bd137c8013ef6 (patch)
tree0e0dbde0fa6adafe4fe24bee8b8da835adbfc271 /src
parentc68c9019d1285f48436661a031b4aff3823b2a37 (diff)
downloadGT5-Unofficial-c4f06e08d3013800c75198023b4bd137c8013ef6.tar.gz
GT5-Unofficial-c4f06e08d3013800c75198023b4bd137c8013ef6.tar.bz2
GT5-Unofficial-c4f06e08d3013800c75198023b4bd137c8013ef6.zip
Player activity logger fixes (#1842)
- Fix potential race condition when adding entries to the list - Make the thread a daemon thread and give it a name for thread dumps Grepped for usages of mBufferedPlayerActivity, no gt addon seems to use it so the type change should be fine.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/common/GT_PlayerActivityLogger.java16
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java13
2 files changed, 18 insertions, 11 deletions
diff --git a/src/main/java/gregtech/common/GT_PlayerActivityLogger.java b/src/main/java/gregtech/common/GT_PlayerActivityLogger.java
index 686c066c2c..7a113bdfb3 100644
--- a/src/main/java/gregtech/common/GT_PlayerActivityLogger.java
+++ b/src/main/java/gregtech/common/GT_PlayerActivityLogger.java
@@ -10,20 +10,22 @@ public class GT_PlayerActivityLogger implements Runnable {
@Override
public void run() {
try {
+ ArrayList<String> buffer = new ArrayList<>();
for (;;) {
if (GT_Log.pal == null) {
return;
}
- ArrayList<String> tList = GT_Mod.gregtechproxy.mBufferedPlayerActivity;
- GT_Mod.gregtechproxy.mBufferedPlayerActivity = new ArrayList<>();
String tLastOutput = "";
- int i = 0;
- for (int j = tList.size(); i < j; i++) {
- if (!tLastOutput.equals(tList.get(i))) {
- GT_Log.pal.println(tList.get(i));
+ // Block on first element for efficiency
+ buffer.add(GT_Mod.gregtechproxy.mBufferedPlayerActivity.take());
+ GT_Mod.gregtechproxy.mBufferedPlayerActivity.drainTo(buffer);
+ for (String output : buffer) {
+ if (!output.equals(tLastOutput)) {
+ GT_Log.pal.println(output);
+ tLastOutput = output;
}
- tLastOutput = tList.get(i);
}
+ buffer.clear();
Thread.sleep(10000L);
}
} catch (Throwable e) {}
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java
index 749dea08fe..2678d01cef 100644
--- a/src/main/java/gregtech/common/GT_Proxy.java
+++ b/src/main/java/gregtech/common/GT_Proxy.java
@@ -25,8 +25,10 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
@@ -497,7 +499,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
"redalloyInsulated",
"infusedteslatiteBundled"));
private final DateFormat mDateFormat = DateFormat.getInstance();
- public ArrayList<String> mBufferedPlayerActivity = new ArrayList<>();
+ public final BlockingQueue<String> mBufferedPlayerActivity = new LinkedBlockingQueue<>();
public final GT_BlockMap<Boolean> mCTMBlockCache = new GT_BlockMap<>();
public boolean mHardcoreCables = false;
public boolean mDisableVanillaOres = true;
@@ -1188,7 +1190,10 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
GT_Log.out.println("GT_Mod: Beginning PostLoad-Phase.");
GT_Log.ore.println("GT_Mod: Beginning PostLoad-Phase.");
if (GT_Log.pal != null) {
- new Thread(new GT_PlayerActivityLogger()).start();
+ final Thread playerActivityLogger = new Thread(new GT_PlayerActivityLogger());
+ playerActivityLogger.setDaemon(true);
+ playerActivityLogger.setName("GT5U Player activity logger");
+ playerActivityLogger.start();
}
GregTech_API.sPostloadStarted = true;
@@ -1487,7 +1492,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
}
if ((!aEvent.entityPlayer.worldObj.isRemote) && (aEvent.action != PlayerInteractEvent.Action.RIGHT_CLICK_AIR)
&& (GT_Log.pal != null)) {
- this.mBufferedPlayerActivity.add(
+ this.mBufferedPlayerActivity.offer(
getDataAndTime() + ";"
+ aEvent.action.name()
+ ";"
@@ -1529,7 +1534,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
public void onBlockHarvestingEvent(BlockEvent.HarvestDropsEvent aEvent) {
if (aEvent.harvester != null) {
if ((!aEvent.world.isRemote) && (GT_Log.pal != null)) {
- this.mBufferedPlayerActivity.add(
+ this.mBufferedPlayerActivity.offer(
getDataAndTime() + ";HARVEST_BLOCK;"
+ aEvent.harvester.getDisplayName()
+ ";DIM:"