Check keepAlive before calling nativeDataIsRecording.

We're encountering a bug where audioRecord.read() can hang for long
enough that stopRecording() fails to join the recording thread (in two
seconds) and returns. In that case, JNI methods get unregistered and
when the recording thread calls nativeDataIsRecorded, it crashes when
it can't find the native method to call.

This version still isn't 100% safe, as the threading sequence still
technically allows for an ordering where (for some reason) the thread
fails to join after the final keepAlive check and long enough for all
the JNI methods to get unregistered, but that seems very unlikely.

BUG=b/64174142

Change-Id: Ie7432a70d0e53bace0885edf35e24bd3f6585399
Reviewed-on: https://chromium-review.googlesource.com/613501
Reviewed-by: Henrik Andreasson <henrika@webrtc.org>
Commit-Queue: Noah Richards <noahric@chromium.org>
Cr-Commit-Position: refs/heads/master@{#19358}
1 file changed
tree: 507da08b9797554ab966fd93456b65018ea7cc78
  1. build_overrides/
  2. data/
  3. infra/
  4. resources/
  5. tools_webrtc/
  6. webrtc/
  7. .clang-format
  8. .git-blame-ignore-revs
  9. .gitignore
  10. .gn
  11. AUTHORS
  12. BUILD.gn
  13. check_root_dir.py
  14. cleanup_links.py
  15. CODE_OF_CONDUCT.md
  16. codereview.settings
  17. DEPS
  18. LICENSE
  19. license_template.txt
  20. LICENSE_THIRD_PARTY
  21. OWNERS
  22. PATENTS
  23. PRESUBMIT.py
  24. pylintrc
  25. README.md
  26. WATCHLISTS
README.md

WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.

Development

See http://www.webrtc.org/native-code/development for instructions on how to get started developing with the native code.

More info