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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions