فهرست منبع

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
+			})
+		})
 	}
 }