diff options
author | Raven Szewczyk <git@eigenraven.me> | 2023-04-07 21:00:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-07 22:00:21 +0200 |
commit | c4f06e08d3013800c75198023b4bd137c8013ef6 (patch) | |
tree | 0e0dbde0fa6adafe4fe24bee8b8da835adbfc271 /src | |
parent | c68c9019d1285f48436661a031b4aff3823b2a37 (diff) | |
download | GT5-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.java | 16 | ||||
-rw-r--r-- | src/main/java/gregtech/common/GT_Proxy.java | 13 |
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:" |