Memory leak on VolatileTextureMgr

We found this memory leak on cocos2d-x 3.16.
The reproduction steps are, load a particle system with embed texture on the plist
Every time you load the same particle system image is retained but never released
The issue is that the texture is the same every time you load the same particle system, but the image is not

The code was like this

void VolatileTextureMgr::addImage(Texture2D *tt, Image *image)
{
    if (tt == nullptr || image == nullptr)
        return;  
  
    VolatileTexture *vt = findVolotileTexture(tt);
    image->retain();
    vt->_uiImage = image;
    vt->_cashedImageType = VolatileTexture::kImage;
}

and we fixed it by changing it to:

void VolatileTextureMgr::addImage(Texture2D *tt, Image *image)
{
    if (tt == nullptr || image == nullptr)
        return;
    
    VolatileTexture *vt = findVolotileTexture(tt);
    image->retain();

    if (vt->_uiImage != nullptr)
    {
        vt->_uiImage->release();
    }

    vt->_uiImage = image;
    vt->_cashedImageType = VolatileTexture::kImage;
}