]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - rpc/conn.go
safcm: don't hang on error before a connection is established
[safcm/safcm.git] / rpc / conn.go
index 65226121b3e1006586335d37ed99b20ac0d6813a..03b748545f12c1c588acb24bac2761e0b439b25c 100644 (file)
@@ -32,7 +32,7 @@ type Conn struct {
        events   chan<- ConnEvent // same as Events, to publish events
        eventsWg sync.WaitGroup
 
-       debug  bool
+       debug     bool
        sshRemote string
        sshOpts   []string
 
@@ -55,7 +55,7 @@ type ConnEvent struct {
 }
 
 // NewConn creates a new connection. Events in the returned struct must be
-// regularly read or the connection will stall. This must be done before
+// regularly read or the connection will hang. This must be done before
 // DialSSH is called to open a connection.
 func NewConn(debug bool) *Conn {
        ch := make(chan ConnEvent)
@@ -124,9 +124,14 @@ func (c *Conn) wait() error {
 }
 
 // Kill forcefully terminates the connection. It's safe to call Kill (and
-// Wait) multiple times.
+// Wait) multiple times. Calling it before Dial*() was called will only close
+// the Events channel.
 func (c *Conn) Kill() error {
        if c.cmd == nil {
+               if c.events != nil {
+                       close(c.events)
+                       c.events = nil
+               }
                return fmt.Errorf("Dial*() not called or already terminated")
        }