Skip to content

Native aborts in libjingle_peerconnection_so.so — stacks not symbolicatable #77

@hehooleehoo

Description

@hehooleehoo

Context

We are using React Native WebRTC and getting a native crash on certain Android devices.

iOS / other Android devices do not experience this error but it is consistently happening for particular devices - mostly on flagship Samsung devices (e.g. Samsung Galaxy S24 Ultra) / Snapdragon processors. Oddly, older Samsung devices (e.g. Samsung A13 5G) cannot replicate.

We are following the LiveKit React Native basic implementation guides.

Environment

  • React Native: 0.81.5
  • React: 19.1.0
  • Expo: 54.0.30
  • livekit-client: 2.17.2
  • @livekit/react-native: 2.9.6
  • @livekit/react-native-webrtc: 137.0.2
  • @livekit/react-native-expo-plugin: 1.0.1

Room / usage pattern

This is a fairly large room style session:

  • Testing with 100-150+ participants, about half of which have cameras on. One participant has audio on (the host).
    participants shown in a FlashList video 2 column grid, with ~6 cameras on screen at a time depending on screen dimensions
    autoSubscribe is disabled
  • we selectively subscribe to visible participant cameras only + a small buffer (maximum 10)
  • off-screen subscribed tracks are temporarily setEnabled(false)
  • after scroll idle + 5s timeout, non-visible tracks are setSubscribed(false) - this is not serialised (as fresh subscriptions are).

We suspected that scrolling would create too many fresh subscriptions at once so we implemented the following:

  • increasing viewability threshold + minimum dwell time
  • removing duplicate subscription decisions from trackPublished
  • serialising fresh camera subscriptions one at a time with a 250ms delay to prevent excessive subscription negotiations all at once

Stack Trace:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 19739 >>> com.my.app <<<

backtrace:
  #00  pc 0x000000000005c900  /apex/com.android.runtime/lib64/bionic/libc.so (abort+172)
  #01  pc 0x00000000004874f8  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #02  pc 0x0000000000487c6c  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #03  pc 0x0000000000486d70  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #04  pc 0x00000000005145f0  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #05  pc 0x000000000067978c  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #06  pc 0x00000000009db314  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #07  pc 0x00000000009d8c48  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #08  pc 0x00000000009d89dc  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #09  pc 0x00000000009e6b00  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #10  pc 0x0000000000a0f1d8  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #11  pc 0x0000000000a0efd4  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #12  pc 0x0000000000a0ffa4  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #13  pc 0x0000000000690900  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #14  pc 0x00000000004956ec  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #15  pc 0x00000000004955d8  /data/app/~~eujHXOgig9B0LQZ-f2Yt7w==/com.my.app-NDB1TjS2Tc-k1X6ZHzx1BQ==/split_config.arm64_v8a.apk!libjingle_peerconnection_so.so (BuildId: efbcc64c7abc4d17)
  #16  pc 0x000000000006d8bc  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+196)
  #17  pc 0x000000000005fd1c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68)

Problem

I'm assuming that the above stack is not helpful because it is stripped, any advice on how to get a more helpful strack trace would be appreciated:

  • The WebRTC .so pulled in via io.github.webrtc-sdk:android (as declared by this project’s Android build.gradle) is stripped.
    ndk-stack (and similar) does not resolve frames inside that library - BuildId matches the AAR, but there is no published companion unstripped / debug-symbol artifact we can point tools at.

  • JS tooling (Metro / source maps) does not apply; this is purely native.

  • From this project’s side: document (README or docs) the recommended way to symbolicate native crashes that land in libjingle_peerconnection_so.so for integrators who only consume the Maven prebuilt — or explicitly state that symbols are not available and crashes there should be reported upstream with version + BuildId.

  • If feasible: coordinate unstripped or debug-symbol artifacts for the exact webrtc-sdk versions this line depends on (or expose an optional Gradle variant / documented Gradle property that pulls symbolized builds), so production crashes become debuggable.

If this pattern (abort, stack mostly in libjingle_peerconnection_so.so) matches a known issue or fixed version, please point me to release notes / upgrade path.

Any guidance is much appreciated! Thanks for your time

If helpful, I've attached a video of the crash happening on a Samsung Galaxy S24 Ultra. This kind of behaviour is observed multiple times in a session.

20260324_204345.mp4

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions