Explorar el Código

修复kcp一个bug,output回调没有被hold住,有会被gc掉的风险

tanghai hace 7 años
padre
commit
1413d75aee
Se han modificado 1 ficheros con 7 adiciones y 2 borrados
  1. 7 2
      Unity/Assets/Model/Module/Message/Network/KCP/KChannel.cs

+ 7 - 2
Unity/Assets/Model/Module/Message/Network/KCP/KChannel.cs

@@ -387,14 +387,19 @@ namespace ETModel
 				this.OnError(ErrorCode.ERR_SocketCantSend);
 			}
 		}
+		
+#if !ENABLE_IL2CPP
+		private KcpOutput kcpOutput;
+#endif
 
 		public void SetOutput()
 		{
 #if ENABLE_IL2CPP
 			Kcp.KcpSetoutput(this.kcp, KcpOutput);
 #else
-			// 跟上一行一样写法,pc跟linux会出错
-			Kcp.KcpSetoutput(this.kcp, (buf, i, ptr, user) => KcpOutput(buf, i, ptr, user));
+			// 跟上一行一样写法,pc跟linux会出错, 保存防止被GC
+			kcpOutput = KcpOutput;
+			Kcp.KcpSetoutput(this.kcp, kcpOutput);
 #endif
 		}