From d65c1654b804f0279f21d39c15b1e9fcee955832 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 8 Jul 2024 20:34:01 +0200 Subject: [PATCH] Stop dereferencing *conn The *conn pointer returned by newConn is dereferenced in newDownstreamConn and connectToUpstream (a premature optimization). As a result, the whole struct is copied and the internal newConn goroutine works with a different chunk of memory than downstreamConn and upstreamConn. --- downstream.go | 4 ++-- upstream.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/downstream.go b/downstream.go index 787de62..8527e94 100644 --- a/downstream.go +++ b/downstream.go @@ -328,7 +328,7 @@ func serverSASLMechanisms(srv *Server) []string { } type downstreamConn struct { - conn + *conn id uint64 @@ -363,7 +363,7 @@ func newDownstreamConn(srv *Server, ic ircConn, id uint64) *downstreamConn { options := connOptions{Logger: logger} cm := xirc.CaseMappingASCII dc := &downstreamConn{ - conn: *newConn(srv, ic, &options), + conn: newConn(srv, ic, &options), id: id, nick: "*", nickCM: "*", diff --git a/upstream.go b/upstream.go index 0d6cccd..b3c9227 100644 --- a/upstream.go +++ b/upstream.go @@ -191,7 +191,7 @@ type pendingUpstreamCommand struct { } type upstreamConn struct { - conn + *conn network *network user *user @@ -353,7 +353,7 @@ func connectToUpstream(ctx context.Context, network *network) (*upstreamConn, er cm := stdCaseMapping uc := &upstreamConn{ - conn: *newConn(network.user.srv, newNetIRCConn(netConn), &options), + conn: newConn(network.user.srv, newNetIRCConn(netConn), &options), network: network, user: network.user, channels: xirc.NewCaseMappingMap[*upstreamChannel](cm),