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]

Reply via email to