From f6c1bba3b6c4ddce1670d81aa47fbf715d819a4a Mon Sep 17 00:00:00 2001 From: James Shubin Date: Tue, 26 Jul 2016 01:58:13 -0400 Subject: [PATCH] Avoid a rare panic if DestroyServer is called early I never actually hit this bug, but I noticed it was possible when examining the WaitGroup code that gets .Done() by DestroyServer(). --- etcd.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/etcd.go b/etcd.go index 94d94306..1a763869 100644 --- a/etcd.go +++ b/etcd.go @@ -1589,6 +1589,9 @@ func (obj *EmbdEtcd) DestroyServer() error { log.Printf("Etcd: DestroyServer: Done removing data...") obj.memberId = 0 + if obj.server == nil { // skip the .Done() below because we didn't .Add(1) it. + return err + } obj.server = nil // important because this is used as an isRunning flag log.Printf("Etcd: DestroyServer: Unlocking server...") obj.serverwg.Done() // -1