Open jozhn opened 1 year ago
这个ScriptContainerMap缓存key是一个lightuserdata指针 也就是TArray的内存地址 我猜会不会是这个array的内存被释放又重新分配 导致地址正好重叠了?
遇到了同样得问题,minidump里看到了luaarray的inner类型不对,和其他的对换了,麻烦问下有什么稳定复现的方式吗
这个ScriptContainerMap缓存key是一个lightuserdata指针 也就是TArray的内存地址 我猜会不会是这个array的内存被释放又重新分配 导致地址正好重叠了?
是的,目前只能通过将UnLua参数使用拷贝来规避。
这个问题不大 地址重叠就重叠 主要是对应的FLuaArray的Ele的Type改了 只要在LuaCore.cpp的CacheScriptContainer函数里面 判断Ele的Type是否变化就行 LuaArray/Set/Map都有TypeInterface类型的变量来代表类型信息 如果是反射创建的就判定一下Property,如果Property为空就是静态导出 就判定一下Name 变化了就重新创建一下userdata 不走缓存了
这个问题不大 地址重叠就重叠 主要是对应的FLuaArray的Ele的Type改了 只要在LuaCore.cpp的CacheScriptContainer函数里面 判断Ele的Type是否变化就行 LuaArray/Set/Map都有TypeInterface类型的变量来代表类型信息 如果是反射创建的就判定一下Property,如果Property为空就是静态导出 就判定一下Name 变化了就重新创建一下userdata 不走缓存了
能给一下修改代码参考么
类似 https://github.com/Tencent/UnLua/issues/265
参数类型是
const TArray<FXXX>&
,偶现TArray传到Lua后里面元素类型是另外的结构体。特定情况下会必现,广播前将
ScriptContainerMap
清空就不会出现:所以跟
ScriptContainerMap
内缓存的userdata有关