1

I have JNI code with AAssetManager. Sometimes, I can see in Google play console the following error:

 #00  pc 00000000000223bc  /system/lib64/libc.so (abort+116)
 
  #01  pc 00000000000934e8  /system/lib64/libc.so (__fortify_fatal(char const*, ...)+120)
 
  #02  pc 0000000000092b50  /system/lib64/libc.so (HandleUsingDestroyedMutex(pthread_mutex_t*, char const*)+52)
 
  #03  pc 00000000000929cc  /system/lib64/libc.so (pthread_mutex_lock+228)
 
  #04  pc 00000000000acfe8  /system/lib64/libc++.so (std::__1::mutex::lock()+8)
 
  #05  pc 0000000000010a7c  /system/lib64/libandroid.so (AAssetManager_open+64)
 
  #06  pc 00000000002870fc  /data/app/com.company.game-pQJ8F8k_RlY7Xj6moTsxGg==/lib/arm64/libgame.so (AndroidUtils::AssetFopen(char const*, char const*)+36)

Code for AndroidUtils:AssetFopen is this:

AAssetManager* AndroidUtils::android_asset_manager = nullptr;

FILE* AndroidUtils::AssetFopen(const char* fname, const char* mode)
{
#if defined(DEBUG) || defined(_DEBUG)
    if(mode[0] == 'w') return nullptr;
#endif

    if (android_asset_manager == nullptr)
    {
        return nullptr;
    }
    
    AAsset* asset = AAssetManager_open(android_asset_manager, fname, AASSET_MODE_BUFFER);
    if(!asset)
    {
        return nullptr;
    }

    return funopen(asset, AndroidUtils::AssetRead, AndroidUtils::AssetWrite, AndroidUtils::AssetSeek, AndroidUtils::AssetClose);
}

static variable android_asset_manager is directly set via JNI from context.resources.assets.

Any idea what can cause this?

Martin Perry
  • 9,232
  • 8
  • 46
  • 114

0 Answers0