[bug反馈]:2.4.x 顺序释放加载同一资源可能造成加载资源已经释放

  • Creator 版本: 2.4.5

  • 目标平台: chrome

  • 重现方式:decRef资源引用计数为1的资源,然后马上加载释放的资源

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

在 decRef 资源的时候,内部并不是同步进行释放资源的操作,而是加入了 _toDelete 释放表
P_OBR_NZGW~J{FF$NQ~QZ@7
并没有在第一时间将 cc.assetManager.assets 内的资源删除,而是会在释放表统一释放时删除,导致在加入释放表到遍历释放表的这段时间内执行加载已释放资源的操作,会导致加载的资源其实已经释放了


上面就是加载资源时进行assets资源的判断,正常加载已释放的逻辑应该进入else里面,但此时因为还没有将释放表里面的资源释放而进入了错误的逻辑导致最终加载的资源其实已经释放

解决方案:

  • 在资源 refCount 为0 时调用 cc.assetManager.releaseAsset 强制释放
  • 延迟一段时间释放