Fix for NDK issue 360. dlclose() skipped pre-API 28. This fixes weird crashes during uninit.

This commit is contained in:
znakeeye
2025-02-09 22:57:24 +01:00
committed by David Reid
parent afc7e17fe6
commit f970144a3d
+14 -5
View File
@@ -38467,6 +38467,18 @@ static ma_result ma_device_get_info__aaudio(ma_device* pDevice, ma_device_type t
return MA_SUCCESS;
}
static void ma_close_library__aaudio(ma_context* pContext)
{
MA_ASSERT(pContext != NULL);
/* Hack for Android bug (see https://github.com/android/ndk/issues/360). Calling dlclose() pre-API 28 may segfault. */
if (ma_android_sdk_version() >= 28) {
ma_dlclose(ma_context_get_log(pContext), pContext->aaudio.hAAudio);
}
pContext->aaudio.hAAudio = NULL;
}
static ma_result ma_context_uninit__aaudio(ma_context* pContext)
{
@@ -38474,9 +38486,7 @@ static ma_result ma_context_uninit__aaudio(ma_context* pContext)
MA_ASSERT(pContext->backend == ma_backend_aaudio);
ma_device_job_thread_uninit(&pContext->aaudio.jobThread, &pContext->allocationCallbacks);
ma_dlclose(ma_context_get_log(pContext), pContext->aaudio.hAAudio);
pContext->aaudio.hAAudio = NULL;
ma_close_library__aaudio(pContext);
return MA_SUCCESS;
}
@@ -38584,8 +38594,7 @@ static ma_result ma_context_init__aaudio(ma_context* pContext, const ma_context_
result = ma_device_job_thread_init(&jobThreadConfig, &pContext->allocationCallbacks, &pContext->aaudio.jobThread);
if (result != MA_SUCCESS) {
ma_dlclose(ma_context_get_log(pContext), pContext->aaudio.hAAudio);
pContext->aaudio.hAAudio = NULL;
ma_close_library__aaudio(pContext);
return result;
}
}