aboutsummaryrefslogtreecommitdiffstats
path: root/master/html.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-11-23 22:09:45 +0100
committerDmitry Vyukov <dvyukov@google.com>2015-11-23 22:09:45 +0100
commite1094916aceff77d16aea60891e613715c72818e (patch)
tree81c431691fcb0541095dd5b6b1987049586533f2 /master/html.go
parent56c4aa20ceec18a9cb9cb5bd6c05b4fbcec26234 (diff)
master: fix deadlock during corpus minimization
Manager can concurrently send RPCs to master, which will deadlock.
Diffstat (limited to 'master/html.go')
-rw-r--r--master/html.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/master/html.go b/master/html.go
index bb7ac1bd7..40159d156 100644
--- a/master/html.go
+++ b/master/html.go
@@ -30,9 +30,6 @@ func (m *Master) httpInfo(w http.ResponseWriter, r *http.Request) {
}
func (m *Master) httpMinimize(w http.ResponseWriter, r *http.Request) {
- m.mu.Lock()
- defer m.mu.Unlock()
-
corpus := make(map[string]bool)
for _, mgr := range m.managers {
resp, err := http.Get("http://" + mgr.http + "/current_corpus")
@@ -56,6 +53,10 @@ func (m *Master) httpMinimize(w http.ResponseWriter, r *http.Request) {
corpus[hash] = true
}
}
+
+ m.mu.Lock()
+ defer m.mu.Unlock()
+
orig := len(m.corpus.m)
m.corpus.minimize(corpus)
fmt.Printf("minimized: %v -> %v -> %v\n", orig, len(corpus), len(m.corpus.m))