浏览代码

hostinfo: fix rlock reentry (#967)

Chris Bannister 8 年之前
父节点
当前提交
605a5e0a26
共有 1 个文件被更改,包括 3 次插入9 次删除
  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 {
 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())
 	return h.ConnectAddress().Equal(host.ConnectAddress())