From 34172cd737448c9bff5d29eb84b7930abf581d6c Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 11 Mar 2018 12:17:18 +0100 Subject: [PATCH] Fix race condition due to ReplaySender in async mode during setup() The ReplaySender used to be started in async mode even before the call to setup(). If the ReplaySender restarts the replay before the setup() call finishes, that call may instead produce a NPE in clientToServerHandshake(). To fix this race condition, the ReplaySender is always started in sync mode and only switched to async after the setup() call. --- src/main/java/com/replaymod/replay/ReplayHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/replaymod/replay/ReplayHandler.java b/src/main/java/com/replaymod/replay/ReplayHandler.java index 84f70867..32ed21c3 100755 --- a/src/main/java/com/replaymod/replay/ReplayHandler.java +++ b/src/main/java/com/replaymod/replay/ReplayHandler.java @@ -82,7 +82,7 @@ public class ReplayHandler { markers = new ArrayList<>(replayFile.getMarkers().or(Collections.emptySet())); - replaySender = new ReplaySender(this, replayFile, asyncMode); + replaySender = new ReplaySender(this, replayFile, false); setup(); @@ -90,6 +90,8 @@ public class ReplayHandler { overlay.setVisible(true); FML_BUS.post(new ReplayOpenEvent.Post(this)); + + replaySender.setAsyncMode(asyncMode); } void restartedReplay() {