Преглед на файлове

fix resource manager dead lock (#2302)

Co-authored-by: sado <liaoyonglin@bilibili.com>
sado преди 2 години
родител
ревизия
bebf6322ff
променени са 2 файла, в които са добавени 7 реда и са изтрити 1 реда
  1. 1 1
      core/syncx/resourcemanager.go
  2. 6 0
      core/syncx/resourcemanager_test.go

+ 1 - 1
core/syncx/resourcemanager.go

@@ -57,8 +57,8 @@ func (manager *ResourceManager) GetResource(key string, create func() (io.Closer
 		}
 
 		manager.lock.Lock()
+		defer manager.lock.Unlock()
 		manager.resources[key] = resource
-		manager.lock.Unlock()
 
 		return resource, nil
 	})

+ 6 - 0
core/syncx/resourcemanager_test.go

@@ -74,6 +74,12 @@ func TestResourceManager_UseAfterClose(t *testing.T) {
 			return nil, errors.New("fail")
 		})
 		assert.NotNil(t, err)
+
+		assert.Panics(t, func() {
+			_, err = manager.GetResource("key", func() (io.Closer, error) {
+				return &dummyResource{age: 123}, nil
+			})
+		})
 	}
 }