KumoKyaku/kcp

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

mycks opened this issue · 7 comments

mycks commented

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

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

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

mycks commented

运行TestServer 再运行TestClient

mycks commented

@KumoKyaku 运行TestServer 再运行TestClient

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

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