KumoKyaku / kcp

KCP C#版。线程安全,运行时无alloc,对gc无压力。
MIT License
832 stars 136 forks source link

rcv_queue 创建buffer和UncheckRecv拷贝数据时有几率会造成越界 #21

Closed mycks closed 2 years ago

mycks commented 2 years ago

..... var buffer = CreateBuffer(peekSize); var recvlength = UncheckRecv(buffer.Memory.Span); .... seg.data.CopyTo(buffer.Slice(recvLength));

初步确认应该是线程安全问题

KumoKyaku commented 2 years ago

有可以复现的测试用例吗,没有复现这个bug

mycks commented 2 years ago

@KumoKyaku KCP-master.zip

mycks commented 2 years ago

运行TestServer 再运行TestClient

mycks commented 2 years ago

@KumoKyaku 运行TestServer 再运行TestClient

KumoKyaku commented 2 years ago

测试代码不合法,不能while (true)Send 测试代码中Send里面调用了异步的TryRecv。异步挂起的时候会导致多线程同时TryRecv。支持多线程只得是支持Update Send Recv三个函数可以在多线程调用。但是不可以多线程同时Send或者Recv,这会导致竞赛条件。

KumoKyaku commented 2 years ago

增加说明 https://github.com/KumoKyaku/KCP#%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8

mycks commented 2 years ago
  1. 非常感谢!新开了线程后解决了我的问题