songgaoye opened a new pull request, #3641:
URL: https://github.com/apache/brpc/pull/3641

   ### What problem does this PR solve?
   
   `RemoteTaskQueue::pop()` checked `BoundedQueue::empty()` without holding
   `_mutex`, while producers modify the queue under that mutex. Concurrent 
access
   to the queue's internal state is a C++ data race.
   
   ### What is changed and the side effects?
   
   Changed:
   
   - Add `_ntask`, an atomic task count maintained while holding `_mutex`.
   - Use a relaxed `_ntask` load as the empty-queue fast-path hint.
   - Re-check and pop the underlying queue under `_mutex`.
   - Use locked relaxed load/store updates for `_ntask`.
   
   Side effects:
   
   - Removes the unsynchronized `BoundedQueue::empty()` access.
   - Keeps the lock-free empty fast path when no remote task is pending.
   - No API or backward-compatibility changes.
   
   ---
   ### Check List:
   - Please make sure your changes are compilable.
   - When providing us with a new feature, it is best to add related tests.
   - Please follow [Contributor Covenant Code of 
Conduct](https://github.com/apache/brpc/blob/master/CODE_OF_CONDUCT.md).
   


-- 
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