shards: compute shard rank outside of critical section

Change-Id: I899eabf0bfc216329bf9f96a92e9dd1c17521ab3
diff --git a/shards/shards.go b/shards/shards.go
index f9893fe..96e8419 100644
--- a/shards/shards.go
+++ b/shards/shards.go
@@ -355,6 +355,11 @@
 }
 
 func (s *shardedSearcher) replace(key string, shard zoekt.Searcher) {
+	var rank uint16
+	if shard != nil {
+		rank = shardRank(shard)
+	}
+
 	s.lock(context.Background())
 	defer s.unlock()
 	old := s.shards[key]
@@ -365,9 +370,8 @@
 	if shard == nil {
 		delete(s.shards, key)
 	} else {
-
 		s.shards[key] = rankedShard{
-			rank:     shardRank(shard),
+			rank:     rank,
 			Searcher: shard,
 		}
 	}