Fixed a crash in Objective-C clients when data channel becomes closed.

Objective-C applications using the data channel could crash when the following conditions were met:
 - The application creates a data channel and sets a data channel delegate
 - The delegate is deallocated but the application never clears it
When this happens, the dealloc method in RTCDataChannel would reset the delegate to nil. The setDelegate: method immediately returns if the new delegate value is the same as the old one. Since the old one is a weak reference, it becomes nil, and the DataChannelDelegateAdapter is not unsubscribed from the native channel before it gets deleted.

The fix removes the two optimizations, and instead subscribes the adapter to the native data channel at creation time - and unsubscribes it at dealloc time. This makes it very easy to reason about the lifetime of the subscription. Removing the optimization should have little effect on performance, as applications typically set the delegate when the channel is created.

BUG=

Review-Url: https://codereview.webrtc.org/1957523006
Cr-Commit-Position: refs/heads/master@{#12649}
1 file changed
tree: 6ef165e6221f051c29224aadbf1c98fa6faa3531
  1. build_overrides/
  2. chromium/
  3. data/
  4. infra/
  5. resources/
  6. talk/
  7. third_party/
  8. tools/
  9. webrtc/
  10. .clang-format
  11. .gitignore
  12. .gn
  13. all.gyp
  14. AUTHORS
  15. BUILD.gn
  16. check_root_dir.py
  17. codereview.settings
  18. COPYING
  19. DEPS
  20. LICENSE
  21. license_template.txt
  22. LICENSE_THIRD_PARTY
  23. OWNERS
  24. PATENTS
  25. PRESUBMIT.py
  26. pylintrc
  27. README.md
  28. setup_links.py
  29. sync_chromium.py
  30. 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. This page is maintained by the Google Chrome team.

Development

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

More info