From 1c401581e3672424af62d76aa52ec6c94ffbc67b Mon Sep 17 00:00:00 2001 From: Piotr Tabor Date: Wed, 15 Jun 2022 12:35:55 +0200 Subject: [PATCH] Close channel of started servers even if embed server fails to start. Before this change: ``` gwmux, err = sctx.registerGateway([]grpc.DialOption{grpc.WithInsecure()}) if err != nil { return err; } ``` caused the Etcd.Serve() method finish without sctx.serversC channel being closed. The code closing Etcd got stuck waiting for all the servers to be running. Signed-off-by: Piotr Tabor --- server/embed/serve.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/embed/serve.go b/server/embed/serve.go index da3a67c0d..595a4e4d2 100644 --- a/server/embed/serve.go +++ b/server/embed/serve.go @@ -120,6 +120,9 @@ func (sctx *serveCtx) serve( } }() + // Make sure serversC is closed even if we prematurely exit the function. + defer close(sctx.serversC) + if sctx.insecure { gs = v3rpc.Server(s, nil, nil, gopts...) v3electionpb.RegisterElectionServer(gs, servElection) @@ -203,7 +206,6 @@ func (sctx *serveCtx) serve( ) } - close(sctx.serversC) return m.Serve() }