From 6d9fe4a02801cdfbb20ef30007e881b10ef59cfa Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Tue, 13 Oct 2020 11:17:35 +0200 Subject: [PATCH] Use string pointers for the telnet output to avoid concurrency map read/write --- stream/telnet/telnet.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/stream/telnet/telnet.go b/stream/telnet/telnet.go index 55e7db6..7c6f832 100644 --- a/stream/telnet/telnet.go +++ b/stream/telnet/telnet.go @@ -13,7 +13,7 @@ var ( // Cfg contains the different options of the telnet package, see below // TODO Config should not be exported Cfg *Options - currentMessage map[string]string + currentMessage map[string]*string ) // Options holds telnet package configuration @@ -33,7 +33,7 @@ func Serve(config *Options) { return } - currentMessage = make(map[string]string) + currentMessage = make(map[string]*string) listener, err := net.Listen("tcp", Cfg.ListenAddress) if err != nil { @@ -92,7 +92,7 @@ func Serve(config *Options) { } for { - n, err := s.Write([]byte(currentMessage[streamID])) + n, err := s.Write([]byte(*currentMessage[streamID])) if err != nil { log.Printf("Error while sending TCP data: %s", err) _ = s.Close() @@ -123,6 +123,7 @@ func StartASCIIArtStream(streamID string, reader io.ReadCloser) { return } + currentMessage[streamID] = new(string) buff := make([]byte, Cfg.Width*Cfg.Height) header := "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" for { @@ -138,6 +139,6 @@ func StartASCIIArtStream(streamID string, reader io.ReadCloser) { } imageStr += "\n" } - currentMessage[streamID] = header + imageStr + *(currentMessage[streamID]) = header + imageStr } }