From 45d01876c1efa0153bae0827877f2b20b116d115 Mon Sep 17 00:00:00 2001 From: simoleo89 Date: Tue, 9 Jun 2026 11:28:26 +0000 Subject: [PATCH] fix: bound the move-blocking Future.get in RoomUserWalkEvent roomUnit.getMoveBlockingTask().get() blocked the Netty event loop with no timeout; a stuck/delayed move-blocking task would park the worker thread (and every client on it) indefinitely. Wait at most 2s, then proceed with the walk. --- .../messages/incoming/rooms/users/RoomUserWalkEvent.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserWalkEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserWalkEvent.java index 51a38650..63e905af 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserWalkEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserWalkEvent.java @@ -163,7 +163,13 @@ public class RoomUserWalkEvent extends MessageHandler { } if (roomUnit.getMoveBlockingTask() != null) { - roomUnit.getMoveBlockingTask().get(); + try { + // Bound the wait so a stuck/delayed move-blocking task can't park + // the Netty event loop (and thus every client on it) indefinitely. + roomUnit.getMoveBlockingTask().get(2, java.util.concurrent.TimeUnit.SECONDS); + } catch (java.util.concurrent.TimeoutException | java.util.concurrent.ExecutionException | InterruptedException e) { + // proceed with the walk regardless + } } boolean needsLocationResync =