From ddaadd870226cd94ecb0591e9cbafba3f0a970cd Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Thu, 9 Jul 2026 12:23:23 -0700 Subject: [PATCH 1/2] debugger: if controller has been disposed, leave showScriptLocation early --- .../lib/src/screens/debugger/codeview_controller.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart b/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart index 53362558278..becbbf9db14 100644 --- a/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart +++ b/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart @@ -218,6 +218,9 @@ class CodeViewController extends DisposableController ); if (succeeded) { + // The controller may have been disposed while awaiting the asynchronous + // location display setup. + if (disposed) return; // Update the scripts history (and make sure we don't react to the // subsequent event). scriptsHistory.current.removeListener(_scriptHistoryListener); From f81d7e5e22fca7aa86004b8f680e33b777622e3b Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Thu, 9 Jul 2026 13:05:17 -0700 Subject: [PATCH 2/2] more short circuits --- .../lib/src/screens/debugger/codeview_controller.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart b/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart index becbbf9db14..befe39d175b 100644 --- a/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart +++ b/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart @@ -237,6 +237,8 @@ class CodeViewController extends DisposableController final isolateRef = serviceConnection.serviceManager.isolateManager.selectedIsolate.value!; final processedReport = await _getSourceReport(isolateRef, current.script); + // The controller may have been disposed while awaiting the source report. + if (disposed) return; parsedScript.value = ParsedScript( script: current.script, @@ -267,6 +269,8 @@ class CodeViewController extends DisposableController if (scriptRef.id != parsedScript.value?.script.id) { // Try to parse the script if it isn't the currently parsed script: final script = await _parseScript(scriptRef); + // The controller may have been disposed while awaiting the script parsing. + if (disposed) return false; if (script == null) { // Return early and indicate failure if parsing fails. reportError(