@@ -32,7 +32,6 @@ type RegisteredServer struct {
3232}
3333
3434type ServerInfo struct {
35- sync.RWMutex
3635 Proto stamps.StampProtoType
3736 MagicQuery [8 ]byte
3837 ServerPk [32 ]byte
@@ -158,6 +157,7 @@ func (serversInfo *ServersInfo) refresh(proxy *Proxy) (int, error) {
158157}
159158
160159func (serversInfo * ServersInfo ) estimatorUpdate () {
160+ // serversInfo.RWMutex is assumed to be Locked
161161 candidate := rand .Intn (len (serversInfo .inner ))
162162 if candidate == 0 {
163163 return
@@ -191,9 +191,9 @@ func (serversInfo *ServersInfo) estimatorUpdate() {
191191
192192func (serversInfo * ServersInfo ) getOne () * ServerInfo {
193193 serversInfo .Lock ()
194+ defer serversInfo .Unlock ()
194195 serversCount := len (serversInfo .inner )
195196 if serversCount <= 0 {
196- serversInfo .Unlock ()
197197 return nil
198198 }
199199 if serversInfo .lbEstimator {
@@ -211,7 +211,6 @@ func (serversInfo *ServersInfo) getOne() *ServerInfo {
211211 candidate = rand .Intn (Min (serversCount , 2 ))
212212 }
213213 serverInfo := serversInfo .inner [candidate ]
214- serversInfo .Unlock ()
215214 dlog .Debugf ("Using candidate [%s] RTT: %d" , (* serverInfo ).Name , int ((* serverInfo ).rtt .Value ()))
216215
217216 return serverInfo
@@ -415,24 +414,24 @@ func fetchDoHServerInfo(proxy *Proxy, name string, stamp stamps.ServerStamp, isN
415414}
416415
417416func (serverInfo * ServerInfo ) noticeFailure (proxy * Proxy ) {
418- serverInfo .Lock ()
417+ proxy . serversInfo .Lock ()
419418 serverInfo .rtt .Add (float64 (proxy .timeout .Nanoseconds () / 1000000 ))
420- serverInfo .Unlock ()
419+ proxy . serversInfo .Unlock ()
421420}
422421
423422func (serverInfo * ServerInfo ) noticeBegin (proxy * Proxy ) {
424- serverInfo .Lock ()
423+ proxy . serversInfo .Lock ()
425424 serverInfo .lastActionTS = time .Now ()
426- serverInfo .Unlock ()
425+ proxy . serversInfo .Unlock ()
427426}
428427
429428func (serverInfo * ServerInfo ) noticeSuccess (proxy * Proxy ) {
430429 now := time .Now ()
431- serverInfo .Lock ()
430+ proxy . serversInfo .Lock ()
432431 elapsed := now .Sub (serverInfo .lastActionTS )
433432 elapsedMs := elapsed .Nanoseconds () / 1000000
434433 if elapsedMs > 0 && elapsed < proxy .timeout {
435434 serverInfo .rtt .Add (float64 (elapsedMs ))
436435 }
437- serverInfo .Unlock ()
436+ proxy . serversInfo .Unlock ()
438437}
0 commit comments