From 0d8bd159ec4ea501ab663a318278184fed5c6320 Mon Sep 17 00:00:00 2001 From: Cecylia Bocovich Date: Thu, 24 Oct 2024 11:24:55 -0400 Subject: [PATCH] Have SnowflakeConn.Close() return errors Return an error if the connection was already closed. On the first close, return an error if any of the calls inside Close() returned an error in this order: - smux.Stream.Close() - pconn.Close() - smux.Session.Close() --- client/lib/snowflake.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go index 7d405cd..794781a 100644 --- a/client/lib/snowflake.go +++ b/client/lib/snowflake.go @@ -243,14 +243,19 @@ type SnowflakeConn struct { // // The collection of snowflake proxies for this connection is stopped. func (conn *SnowflakeConn) Close() error { + var err error log.Printf("---- SnowflakeConn: closed stream %v ---", conn.ID()) - conn.Stream.Close() + err = conn.Stream.Close() log.Printf("---- SnowflakeConn: end collecting snowflakes ---") conn.snowflakes.End() - conn.pconn.Close() + if inerr := conn.pconn.Close(); err == nil { + err = inerr + } log.Printf("---- SnowflakeConn: discarding finished session ---") - conn.sess.Close() - return nil // TODO: return errors if any of the above do + if inerr := conn.sess.Close(); err == nil { + err = inerr + } + return err } // loop through all provided STUN servers until we exhaust the list or find