Skip to content

Crash: invalid pthread_t passed to pthread_getcpuclockid when using GSYVideoPlayer (ijk mode) after upgrading to sentry-android-gradle-plugin 5.11.0 #4745

@hurist

Description

@hurist

Environment

self-hosted (https://develop.sentry.dev/self-hosted/)

Steps to Reproduce

Describe the bug

After upgrading to sentry-android-gradle-plugin 5.11.0, our app started crashing when using GSYVideoPlayer (version 11.1.0) in ijk mode.

The crash happens inside ART’s sampling profiler thread with the following message:

invalid pthread_t 0x6a3e8e4730 passed to pthread_getcpuclockid
Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 25681 (Sampling Profil), pid 22954 (com.httest.f1)
Softversion: PD2405B_A_15.0.25.40.W10.V000L1
Time: 2025-09-17 10:22:15
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'vivo/PD2405M/PD2405:15/AP3A.240905.015.A1_V000L1/compiler08272107:user/release-keys'
Revision: '0'
ABI: 'arm64'
Timestamp: 2025-09-17 10:22:15.434576066+0800
Process uptime: 62s
Cmdline: com.httest.f1
pid: 22954, tid: 25681, name: Sampling Profil  >>> com.httest.f1 <<<
uid: 10674
tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
Abort message: 'invalid pthread_t 0x6a3e8e4730 passed to pthread_getcpuclockid'
    x0  0000000000000000  x1  0000000000006451  x2  0000000000000006  x3  0000006a83ee4250
    x4  6f1f2f3236336437  x5  6f1f2f3236336437  x6  6f1f2f3236336437  x7  7f7f7f7f7f7f7f7f
    x8  00000000000000f0  x9  0000007013c71878  x10 0000000000000001  x11 0000007013d085d0
    x12 0000000068ca1b56  x13 000000007fffffff  x14 00000000091c85be  x15 0000056efbafce68
    x16 0000007013d74d58  x17 0000007013d5c000  x18 0000006a30ce0000  x19 00000000000059aa
    x20 0000000000006451  x21 00000000ffffffff  x22 b400006b7000e430  x23 0000006a83ee4a80
    x24 b400006b80287370  x25 b400006b200bd6f0  x26 b400006b200bf610  x27 00000000000026ac
    x28 0000000000000000  x29 0000006a83ee42d0
    lr  0000007013cf0948  sp  0000006a83ee4230  pc  0000007013cf0974  pst 0000000000001000
10 total frames
backtrace:
      #00 pc 00000000000a9974  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) (BuildId: 592f445e153f1fd45b880b26f0715c0b)
      getsentry/sentry#1 pc 00000000000bc9b4  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_internal_find(long, char const*)+196) (BuildId: 592f445e153f1fd45b880b26f0715c0b)
      getsentry/sentry#2 pc 00000000000bc8c8  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_internal_gettid(long, char const*)+8) (BuildId: 592f445e153f1fd45b880b26f0715c0b)
      getsentry/sentry#3 pc 00000000000bc6b8  /apex/com.android.runtime/lib64/bionic/libc.so (pthread_getcpuclockid+24) (BuildId: 592f445e153f1fd45b880b26f0715c0b)
      getsentry/sentry#4 pc 00000000008bd038  /apex/com.android.art/lib64/libart.so (art::Thread::GetCpuMicroTime() const+40) (BuildId: 16b37ef712c5fee7ceda016b2e3b9c9a)
      getsentry/sentry#5 pc 00000000008df75c  /apex/com.android.art/lib64/libart.so (art::GetSample(art::Thread*, void*) (.__uniq.52483287290921479263723184702455367361)+284) (BuildId: 16b37ef712c5fee7ceda016b2e3b9c9a)
      getsentry/sentry#6 pc 00000000008d9f28  /apex/com.android.art/lib64/libart.so (art::ThreadList::ForEach(void (*)(art::Thread*, void*), void*)+56) (BuildId: 16b37ef712c5fee7ceda016b2e3b9c9a)
      getsentry/sentry#7 pc 00000000008df474  /apex/com.android.art/lib64/libart.so (art::Trace::RunSamplingThread(void*)+356) (BuildId: 16b37ef712c5fee7ceda016b2e3b9c9a)
      getsentry/sentry#8 pc 00000000000bc3fc  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+220) (BuildId: 592f445e153f1fd45b880b26f0715c0b)
      getsentry/sentry#9 pc 00000000000ad680  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 592f445e153f1fd45b880b26f0715c0b)
dumped - all
handle_request: return status is fail
BBinder_init Processname  <pre-initialized>  
BBinder_init hasGetProcessName  <pre-initialized>

To Reproduce

Steps to reproduce the behavior:

Add GSYVideoPlayer 11.1.0 to project, configured in ijk mode.

Upgrade sentry-android-gradle-plugin to 5.11.0.

Run app and play a video.

App crashes within seconds.

Environment

Sentry Android Gradle Plugin: 5.11.0

GSYVideoPlayer: 11.1.0 (ijk mode)

Android version: 15 (AP3A.240905.015.A1)

Device: vivo PD2405B

Reproducibility: ~100% when profiling enabled

Additional context

Disabling profiling (profilesSampleRate = 0.0) avoids the crash.

Older versions of Sentry SDK did not have this issue.

GSY (ijk mode) spawns multiple native pthreads for FFmpeg; it seems Sentry’s sampling profiler races with thread teardown, passing an invalid pthread_t to pthread_getcpuclockid.

Workarounds tried

Turning off performance profiling avoids the crash.

Reverting to an older Sentry version avoids the crash.

Request

Please confirm whether this is a known issue in the sampling profiler integration with native pthreads (ijkplayer/GSY), and if there’s a fix planned or recommended workaround.

Expected Result

App should not crash when profiling is enabled.

Actual Result

App crashes within seconds.

Product Area

Other

Link

No response

DSN

No response

Version

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status

    Waiting for: Community

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions