sogou / srpc

RPC framework based on C++ Workflow. Supports SRPC, Baidu bRPC, Tencent tRPC, thrift protocols.
Apache License 2.0
1.93k stars 382 forks source link

关于 RPCBuffer 中 read_back 问题 #369

Closed zhang275 closed 5 months ago

zhang275 commented 5 months ago

在 RPCBuffer 的 readback 函数中,如果 offset 设置特别小,应该回退到头部处(即 cur.first 指向 begin(), second为 0),然而此时状态为 cur_.first 指向 begin(), second为begin()->buflen;如果此时调用 fetch,那么获取的是第二个缓存块,逻辑上来说,应该是第一个缓存块吧。

holmes1412 commented 5 months ago

感谢!太细心了!这里对减到第一个缓存块的边界处理是有问题的。

我们修正一下,如果你感兴趣也非常欢迎提一个PR~

zhang275 commented 5 months ago

如果第一个 break 语句没有触发,并且此时又到达了 bufferlist.begin(),那么此时 offset 是过小的,因此个人感觉只需加一句赋值即可

        if (cur_.first == buffer_list_.begin())     
        {
            cur_.second = 0;                                   // add
            break;
        }
holmes1412 commented 5 months ago

是的,这样可以修复。感兴趣可以提个PR哈