1

我正在使用cocos2dx-v3.17.2, ndk-r21d, android studio 4.1.1. 我遇到了崩溃

cocos2d::TextureCache::loadImage() + 290

我来自 firebase crashlytics 的崩溃堆栈跟踪如下图所示: 在此处输入图像描述

我不使用TextureCache::addImageAsync or TextureCache::addImage预加载纹理的方法。所以我无法理解实际发生了什么。

cocos代码如下:

void TextureCache::loadImage()
{
    AsyncStruct *asyncStruct = nullptr;
    while (!_needQuit)
    {
        std::unique_lock<std::mutex> ul(_requestMutex);
        // pop an AsyncStruct from request queue
        if (_requestQueue.empty())
        {
            asyncStruct = nullptr;
        }
        else
        {
            asyncStruct = _requestQueue.front();
            _requestQueue.pop_front();
        }

        if (nullptr == asyncStruct) {
            if (_needQuit) {
                break;
            }
            _sleepCondition.wait(ul);
            continue;
        }
        ul.unlock();

        // load image
        asyncStruct->loadSuccess = asyncStruct->image.initWithImageFileThreadSafe(asyncStruct->filename);

        // ETC1 ALPHA supports.
        if (asyncStruct->loadSuccess && asyncStruct->image.getFileType() == Image::Format::ETC && !s_etc1AlphaFileSuffix.empty())
        { // check whether alpha texture exists & load it
            auto alphaFile = asyncStruct->filename + s_etc1AlphaFileSuffix;
            if (FileUtils::getInstance()->isFileExist(alphaFile))
                asyncStruct->imageAlpha.initWithImageFileThreadSafe(alphaFile);
        }
        // push the asyncStruct to response queue
        _responseMutex.lock();
        _responseQueue.push_back(asyncStruct);
        _responseMutex.unlock();
    }
}

崩溃发生在以下行:

_sleepCondition.wait(ul);

请帮我。提前致谢。

4

0 回答 0