Browse Source

hostinfo: fix rlock reentry (#967)

Chris Bannister 8 years ago
parent
commit
605a5e0a26
1 changed files with 3 additions and 9 deletions
  1. 3 9
      host_source.go

+ 3 - 9
host_source.go

@@ -121,15 +121,9 @@ type HostInfo struct {
 }
 
 func (h *HostInfo) Equal(host *HostInfo) bool {
-	h.mu.RLock()
-	defer h.mu.RUnlock()
-	//If both hosts pointers are same then lock is required only once because of below reasons:
-	//Reason 1: There is no point taking lock twice on same mutex variable.
-	//Reason 2: It may lead to deadlock e.g. if WLock is requested by other routine in between 1st & 2nd RLock
-	//So WLock will be blocked on 1st RLock and 2nd RLock will be blocked on requested WLock.
-	if h != host {
-		host.mu.RLock()
-		defer host.mu.RUnlock()
+	if h == host {
+		// prevent rlock reentry
+		return true
 	}
 
 	return h.ConnectAddress().Equal(host.ConnectAddress())