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]