Fix extension manager resource deadlock (#5066)

Signed-off-by: alexyao2015 <alexyao2015@users.noreply.github.com>
Co-authored-by: alexyao2019@gmail.com <alexyao2015@users.noreply.github.com>
This commit is contained in:
Alex Yao
2025-10-20 19:59:54 -04:00
committed by GitHub
parent fb6477a37e
commit 2b32cad4da
+6 -2
View File
@@ -705,9 +705,13 @@ impl ExtensionManager {
// Loop through each extension and try to read the resource, don't raise an error if the resource is not found
// TODO: do we want to find if a provided uri is in multiple extensions?
// currently it will return the first match and skip any others
for extension_name in self.extensions.lock().await.keys() {
// Collect extension names first to avoid holding the lock during iteration
let extension_names: Vec<String> = self.extensions.lock().await.keys().cloned().collect();
for extension_name in extension_names {
let result = self
.read_resource_from_extension(uri, extension_name, cancellation_token.clone())
.read_resource_from_extension(uri, &extension_name, cancellation_token.clone())
.await;
match result {
Ok(result) => return Ok(result),