From 483ff9b8d136ea65be1389b17f1f4995e20e8cfc Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 5 Jun 2025 13:23:38 -0400 Subject: [PATCH] sync change for memory --- docs/src/progress/renderertodo.md | 1 + .../client/ClientSynchronizationManager.java | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 55721005..19d79805 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2123,6 +2123,7 @@ Physics work Debug rendering for facing vectors Fix progressive pathfinding iteration Non-body ground movement animation work +Synchronization change for memory pressure diff --git a/src/main/java/electrosphere/net/synchronization/client/ClientSynchronizationManager.java b/src/main/java/electrosphere/net/synchronization/client/ClientSynchronizationManager.java index 5cd56048..6da7e468 100644 --- a/src/main/java/electrosphere/net/synchronization/client/ClientSynchronizationManager.java +++ b/src/main/java/electrosphere/net/synchronization/client/ClientSynchronizationManager.java @@ -26,7 +26,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.locks.ReentrantLock; import electrosphere.engine.Globals; import electrosphere.entity.Entity; @@ -53,7 +53,7 @@ public class ClientSynchronizationManager { /** * The list of messages to loop through */ - private List messages = new CopyOnWriteArrayList(); + private List messages = new LinkedList(); /** * Map that tracks the number of times a network message bounces @@ -65,18 +65,26 @@ public class ClientSynchronizationManager { */ private Map deletedEntityIds = new HashMap(); + /** + * Lock for thread-safeing the manager + */ + private ReentrantLock lock = new ReentrantLock(); + /** * Pushes a message into the queue to be processed * @param message The message */ public void pushMessage(SynchronizationMessage message){ + lock.lock(); this.messages.add(message); + lock.unlock(); } /** * Processes all messages in the queue and then clears the queue */ public void processMessages(){ + lock.lock(); List messagesToClear = new LinkedList(); for(SynchronizationMessage message : messages){ @@ -197,6 +205,7 @@ public class ClientSynchronizationManager { this.deletedEntityIds.remove(key); } } + lock.unlock(); } /**