From cc931a23190803c916aea81008437dcd3eeb5562 Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Wed, 14 Dec 2016 10:12:40 -0800 Subject: [PATCH] embed: deep copy user handlers Shallow copy of user handlers leads to a nil map assignment when enabling pprof. Since the map is being modified, it should probably be deep copied into the server context, which fixes the crash. --- embed/etcd.go | 4 +++- embed/serve.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/embed/etcd.go b/embed/etcd.go index 5fdbcad2c..b80179841 100644 --- a/embed/etcd.go +++ b/embed/etcd.go @@ -286,7 +286,9 @@ func startClientListeners(cfg *Config) (sctxs map[string]*serveCtx, err error) { plog.Info("stopping listening for client requests on ", u.Host) } }() - sctx.userHandlers = cfg.UserHandlers + for k := range cfg.UserHandlers { + sctx.userHandlers[k] = cfg.UserHandlers[k] + } if cfg.EnablePprof { sctx.registerPprof() } diff --git a/embed/serve.go b/embed/serve.go index 0e113ac31..84b97615c 100644 --- a/embed/serve.go +++ b/embed/serve.go @@ -51,7 +51,7 @@ type serveCtx struct { func newServeCtx() *serveCtx { ctx, cancel := context.WithCancel(context.Background()) - return &serveCtx{ctx: ctx, cancel: cancel} + return &serveCtx{ctx: ctx, cancel: cancel, userHandlers: make(map[string]http.Handler)} } // serve accepts incoming connections on the listener l,