From 1af59a16cf8a2335703a72baa896307138cc7f86 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 1 May 2021 11:40:15 +0200 Subject: [PATCH] reduces the danger of race conditions --- .../digital/core/io/telnet/Server.java | 24 +++++++++++++------ .../digital/core/io/telnet/Telnet.java | 2 +- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/io/telnet/Server.java b/src/main/java/de/neemann/digital/core/io/telnet/Server.java index 6b5966eb9..af5689d58 100644 --- a/src/main/java/de/neemann/digital/core/io/telnet/Server.java +++ b/src/main/java/de/neemann/digital/core/io/telnet/Server.java @@ -5,7 +5,7 @@ */ package de.neemann.digital.core.io.telnet; -import de.neemann.digital.core.Observer; +import de.neemann.digital.core.SyncAccess; import java.io.IOException; import java.io.InputStream; @@ -22,7 +22,8 @@ public class Server { private final ServerThread serverThread; private boolean telnetEscape; private ClientThread client; - private Observer notify; + private Telnet telnet; + private SyncAccess syncAccess; Server(int port) throws IOException { buffer = new ByteBuffer(1024); @@ -48,8 +49,15 @@ public class Server { buffer.deleteAll(); } - void setNotify(Observer notify) { - this.notify = notify; + /** + * Connects the server with the telnet node + * + * @param telnet the telnet node + * @param syncAccess used to access the model + */ + public void setTelnetNode(Telnet telnet, SyncAccess syncAccess) { + this.telnet = telnet; + this.syncAccess = syncAccess; } boolean hasData() { @@ -65,9 +73,11 @@ public class Server { } private void dataReceived(int data) { - buffer.put((byte) data); - if (notify != null) - notify.hasChanged(); + if (syncAccess != null) + syncAccess.modify(() -> { + buffer.put((byte) data); + telnet.hasChanged(); + }); } boolean isDead() { diff --git a/src/main/java/de/neemann/digital/core/io/telnet/Telnet.java b/src/main/java/de/neemann/digital/core/io/telnet/Telnet.java index 835d6e2bb..cdd682e25 100644 --- a/src/main/java/de/neemann/digital/core/io/telnet/Telnet.java +++ b/src/main/java/de/neemann/digital/core/io/telnet/Telnet.java @@ -103,7 +103,7 @@ public class Telnet extends Node implements Element { throw new NodeException(Lang.get("err_couldNotCreateServer"), e); } server.setTelnetEscape(telnetEscape); - server.setNotify(() -> model.modify(Telnet.this::hasChanged)); + server.setTelnetNode(this, model); } }