hashicorp / go-plugin

Golang plugin system over RPC.
Mozilla Public License 2.0
5.25k stars 450 forks source link

RPCServer should close DoneCh when return #216

Closed 113xiaoji closed 2 years ago

113xiaoji commented 2 years ago

func (s *RPCServer) Serve(lis net.Listener) { defer func() { if s.DoneCh != nil { close(s.DoneCh) s.DoneCh = nil } }() for { conn, err := lis.Accept() if err != nil { severity := "ERR" if errors.Is(err, net.ErrClosed) { severity = "DEBUG" } log.Printf("[%s] plugin: plugin server: %s", severity, err) return }

    go s.ServeConn(conn)
}

}

add defer func() { if s.DoneCh != nil { close(s.DoneCh) s.DoneCh = nil } }() because ,for example test TestServer_testStdLogger,the server change to netrpcserver,it wil be hang ,becase the DoneCh dose not close