legionxiong opened a new pull request, #3412:
URL: https://github.com/apache/brpc/pull/3412
A CQ callback can remain queued across Reset() and run after the main socket
has been revived with a different CQ. Verify that the callback's CQ SocketId
still matches the endpoint before accessing RDMA resources. Add a regression
test covering a stale callback from an older generation.
Issue Number: resolve #3401
Problem Summary:
An RDMA completion-queue callback may remain queued after its endpoint is
reset. If the main socket is later revived with a new CQ, the stale callback
can successfully acquire the revived socket and continue operating on the
endpoint's new generation.
This may cause the stale callback to access invalid or mismatched RDMA
resources in `RdmaEndpoint::PollCq`, potentially resulting in a crash.
### What is changed and the side effects?
Changed:
- Verify that the CQ socket passed to `RdmaEndpoint::PollCq` still matches
the
endpoint's current `_cq_sid`.
- Return immediately when the callback belongs to an older CQ generation.
- Add a regression test covering a stale callback running after the endpoint
has switched to a new CQ.
Side effects:
- Performance effects: One `SocketId` comparison is added to each `PollCq`
invocation. The overhead is negligible.
- Breaking backward compatibility: No.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]