From 906d1ba8d04047f085d320b28c8e4d419eed2791 Mon Sep 17 00:00:00 2001 From: fengzhitalker Date: Sat, 8 Sep 2018 10:01:31 +0800 Subject: [PATCH 1/2] Update proxy_data.go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复多个协程同时删除同一个backend,第二次为空的情况 --- src/proxy/proxy_data.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/proxy/proxy_data.go b/src/proxy/proxy_data.go index 233833a..fae49c0 100644 --- a/src/proxy/proxy_data.go +++ b/src/proxy/proxy_data.go @@ -54,8 +54,10 @@ func (proxyData *ProxyData) cleanBackend(url string) { func (proxyData *ProxyData) cleanDeadend(url string) { proxyData.mutex.Lock() - proxyData.Backends[url] = proxyData.Deads[url] - delete(proxyData.Deads, url) + if backEnd, isHas := proxyData.Backends[url]; isHas { + proxyData.Deads[url] = backEnd + delete(proxyData.Backends, url) + } defer proxyData.mutex.Unlock() } From b83e8e08921df6ccda5c9639e9dd1f7bbc044c17 Mon Sep 17 00:00:00 2001 From: fengzhitalker Date: Sat, 8 Sep 2018 10:37:21 +0800 Subject: [PATCH 2/2] Update proxy_data.go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复多协程下共同执行连接节点的删除和恢复,值为空的判断 --- src/proxy/proxy_data.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/proxy/proxy_data.go b/src/proxy/proxy_data.go index fae49c0..5b21b73 100644 --- a/src/proxy/proxy_data.go +++ b/src/proxy/proxy_data.go @@ -47,16 +47,18 @@ func (proxyData ProxyData) BackendUrls() []string { func (proxyData *ProxyData) cleanBackend(url string) { proxyData.mutex.Lock() - proxyData.Deads[url] = proxyData.Backends[url] - delete(proxyData.Backends, url) + if backEnd, isHas := proxyData.Backends[url]; isHas { + proxyData.Deads[url] = backEnd + delete(proxyData.Backends, url) + } defer proxyData.mutex.Unlock() } func (proxyData *ProxyData) cleanDeadend(url string) { proxyData.mutex.Lock() - if backEnd, isHas := proxyData.Backends[url]; isHas { - proxyData.Deads[url] = backEnd - delete(proxyData.Backends, url) + if backEnd, isHas := proxyData.Deads[url]; isHas { + proxyData.Backends[url] = backEnd + delete(proxyData.Deads, url) } defer proxyData.mutex.Unlock() }