From aa95f68396f49442033de139d1639ac04115d376 Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Mon, 1 May 2017 14:12:40 -0700 Subject: [PATCH] embed: fix blocking Close before gRPC server start If 'StartEtcd' returns before starting gRPC server (e.g. mismatch snapshot, misconfiguration), receiving from grpcServerC blocks forever. This patch just closes the channel to not block on grpcServerC, and proceeds to next stop operations in Close. This was masking the issues in https://github.com/coreos/etcd/issues/7834 Signed-off-by: Gyu-Ho Lee --- embed/etcd.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/embed/etcd.go b/embed/etcd.go index 4d23a04009c3..22232314b3ce 100644 --- a/embed/etcd.go +++ b/embed/etcd.go @@ -127,6 +127,11 @@ func StartEtcd(inCfg *Config) (e *Etcd, err error) { } if e.Server, err = etcdserver.NewServer(srvcfg); err != nil { + // errored before starting gRPC server and + // sending to e.sctxs[~].serveCtx.grpcServerC + for _, sctx := range e.sctxs { + close(sctx.grpcServerC) + } return }