Skip to content
Snippets Groups Projects
Unverified Commit 4603af9c authored by Wolfgang Welz's avatar Wolfgang Welz
Browse files

assure conn is not nil

parent 1c3f0760
Branches
No related tags found
No related merge requests found
package client package client
import ( import (
"errors"
"net" "net"
"sync" "sync"
"time" "time"
...@@ -96,28 +97,43 @@ func (c *connector) Stop() { ...@@ -96,28 +97,43 @@ func (c *connector) Stop() {
} }
func (c *connector) new() { func (c *connector) new() {
c.mu.Lock()
defer c.mu.Unlock()
select { select {
case _ = <-c.closing: case _ = <-c.closing:
return return
default: default:
c.mu.Lock() c.conn = nil
defer c.mu.Unlock() tcpConn, err := net.Dial("tcp", config.Node.GetString(CfgServerAddress))
conn, err := net.Dial("tcp", config.Node.GetString(CfgServerAddress))
if err != nil { if err != nil {
time.AfterFunc(1*time.Minute, c.new) time.AfterFunc(1*time.Minute, c.new)
log.Warn(err) log.Warn(err)
return return
} }
c.conn = network.NewManagedConnection(conn) c.conn = network.NewManagedConnection(tcpConn)
c.conn.Events.Close.Attach(events.NewClosure(c.new)) c.conn.Events.Close.Attach(events.NewClosure(c.new))
} }
} }
func (c *connector) Close() (err error) {
c.mu.Lock()
defer c.mu.Unlock()
if c.conn != nil {
err = c.conn.Close()
}
return
}
func (c *connector) Write(b []byte) (int, error) { func (c *connector) Write(b []byte) (int, error) {
// TODO: check that start was called // TODO: check that start was called
// TODO: check that Stop was not called // TODO: check that Stop was not called
c.mu.Lock() c.mu.Lock()
defer c.mu.Unlock() defer c.mu.Unlock()
if c.conn == nil {
return 0, errors.New("no connection established")
}
return c.conn.Write(b) return c.conn.Write(b)
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment