浏览代码

fixing deadlock

reid 2 年之前
父节点
当前提交
9aafa4ca52
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      broadcast/broadcast.go

+ 2 - 1
broadcast/broadcast.go

@@ -232,11 +232,11 @@ func GetContainerNetworks(containers []string) map[string]string {
 // update broadcastState with a map of items
 func UpdateBroadcastState(values map[string]interface{}) error {
 	mu.Lock()
-	defer mu.Unlock()
 	v := reflect.ValueOf(&broadcastState).Elem()
 	for key, value := range values {
 		field := v.FieldByName(key)
 		if !field.IsValid() || !field.CanSet() {
+			mu.Unlock()
 			return fmt.Errorf("field %s does not exist or is not settable", key)
 		}
 		val := reflect.ValueOf(value)
@@ -244,6 +244,7 @@ func UpdateBroadcastState(values map[string]interface{}) error {
 			val = val.Elem() // Extract the underlying value from the interface
 		}
 		if err := recursiveUpdate(field, val); err != nil {
+			mu.Unlock()
 			return err
 		}
 	}