diff --git a/CHANGELOG.md b/CHANGELOG.md index 932d455415..f06b6cb6a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## TBD + +### Bug fixes + +* Avoid any possibility of multiple conflicting native crash handlers or stack-unwinders running concurrently + [#1960](https://github.com/bugsnag/bugsnag-android/pull/1960) + ## 6.1.0 (2023-12-05) ### Enhancements diff --git a/bugsnag-plugin-android-ndk/src/main/jni/bugsnag_ndk.c b/bugsnag-plugin-android-ndk/src/main/jni/bugsnag_ndk.c index e647a3b88c..e2fbd419b4 100644 --- a/bugsnag-plugin-android-ndk/src/main/jni/bugsnag_ndk.c +++ b/bugsnag-plugin-android-ndk/src/main/jni/bugsnag_ndk.c @@ -68,7 +68,7 @@ bool bsg_run_on_error() { } bool bsg_begin_handling_crash() { - static bool expected = false; + bool expected = false; return atomic_compare_exchange_strong(&bsg_global_env->handling_crash, &expected, true); } diff --git a/bugsnag-plugin-android-ndk/src/main/jni/utils/stack_unwinder.cpp b/bugsnag-plugin-android-ndk/src/main/jni/utils/stack_unwinder.cpp index 3df2edb00d..f0299e894b 100644 --- a/bugsnag-plugin-android-ndk/src/main/jni/utils/stack_unwinder.cpp +++ b/bugsnag-plugin-android-ndk/src/main/jni/utils/stack_unwinder.cpp @@ -142,7 +142,7 @@ ssize_t bsg_unwind_crash_stack(bugsnag_stackframe stack[BUGSNAG_FRAMES_MAX], // we always check unwinding_crash_stack and set *before* attempting to // retrieve the crash unwinder to avoid picking up an unwinder that is about // to be destroyed by bsg_unwinder_refresh - static bool expected = false; + bool expected = false; if (!std::atomic_compare_exchange_strong(&unwinding_crash_stack, &expected, true)) { return 0;