Skip to content

Conversation

@bparrishMines
Copy link
Contributor

@bparrishMines bparrishMines commented Dec 4, 2025

Fixes flutter/flutter#176451

Pre-Review Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

Footnotes

  1. Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. 2 3

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request fixes a crash that occurs when native objects call to Dart after a hot restart. The fix involves updating the pigeon dependency and regenerating the CameraXLibrary.g.kt file. The new generated code correctly adds checks to verify the existence of native instances before making callbacks to Dart. The CHANGELOG.md and pubspec.yaml files are also updated appropriately.

The code changes are correct, but the pull request does not fully adhere to the repository's contribution guidelines. Please update the pull request title to [camera_android_camerax] fix crash and fill out the PR description, including the checklist and a link to the issue this PR resolves.

@bparrishMines bparrishMines changed the title fix crash [camera_android_camerax] Updates pigeon generation to prevent crash when objects call to Dart after a hot restart Dec 4, 2025
@bparrishMines bparrishMines marked this pull request as ready for review December 4, 2025 20:24
Copy link
Contributor

@camsim99 camsim99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This LGTM but just to clarify--does this fix:

This scenario still causes a crash because the callback is being made by a listener attached to a static object. So the listener never gets garbage collected and continues to call to Dart forever.

I'm unclear on what static object you're referring to which is part of my confusion I'm sure 😅

of if that still requires more work.

@bparrishMines
Copy link
Contributor Author

I believe the Observer is transitively attached to the ProcessCameraProvider.getInstance() static object:

final ProcessCameraProvider provider = ProcessCameraProvider.getInstance();
List<CameraInfo> cameraInfos = provider.getAvailableCameraInfos();
LiveData<CameraState> cameraState = cameraInfos[0].getCameraState();
cameraState.observe(/**add observer **/);

As you stated in #10529, we should remove the observers, but hot restart doesn't give us the chance.

@camsim99
Copy link
Contributor

camsim99 commented Dec 8, 2025

Ah gotcha okay. So to clarify, throwing the CameraXError prevents the crash?

@bparrishMines
Copy link
Contributor Author

bparrishMines commented Dec 8, 2025

Yea, returning the CameraXError prevents the crash happening in the codec later and the error is now handled and logged in FlutterMethodRunnable.onFailure.

@bparrishMines bparrishMines added the autosubmit Merge PR when tree becomes green via auto submit App label Dec 9, 2025
@auto-submit auto-submit bot merged commit 2f44ca2 into flutter:main Dec 9, 2025
80 checks passed
@bparrishMines bparrishMines deleted the android_hotrestart branch December 9, 2025 18:55
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Dec 10, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Dec 10, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Dec 10, 2025
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Dec 10, 2025
flutter/packages@338ecd3...74a5a53

2025-12-10 47866232+chunhtai@users.noreply.github.com [ci] Rewrites
branch exists without external dependencies (flutter/packages#10594)
2025-12-10 61003485+BottlePumpkin@users.noreply.github.com [rfw] Add
Flexible widget support to core widgets (flutter/packages#9750)
2025-12-09 matt.boetger@gmail.com Redistribute package ownership among
Android team (flutter/packages#10569)
2025-12-09 10687576+bparrishMines@users.noreply.github.com
[camera_android_camerax] Updates pigeon generation to prevent crash when
objects call to Dart after a hot restart (flutter/packages#10571)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App p: camera platform-android

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Camera initialization fails when re-running the app without stopping it

2 participants