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

   ### What problem does this PR solve?
   
   Issue Number: resolve 
   
   Problem Summary:
   
   `Socket` maintains `_unwritten_bytes` as the source of truth for pending
   output, but also caches the overcrowding state in a separate `volatile bool`
   named `_overcrowded`.
   
   `WriteRequest::Setup()` and `CancelUnwrittenBytes()` can update this cached
   boolean concurrently with `Socket::Write()` reading it. `volatile` does not
   provide synchronization, so these accesses form a C++ data race. The cached
   state can also become stale when concurrent increment and decrement paths
   overwrite each other.
   
   ### What is changed and the side effects?
   
   Changed:
   
   - Remove the `_overcrowded` cached boolean.
   - Derive the overcrowding state from an atomic load of `_unwritten_bytes`.
   - Use `is_overcrowded()` in write admission checks and socket debug output.
   - Add unit coverage for the boundary behavior around
     `-socket_max_unwritten_bytes`.
   
   Side effects:
   - Performance effects:
   
   - Breaking backward compatibility: 
   
   ---
   ### 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