Specifically: if a request handling thread is in flight but scheduled
out when shutdown is called on the server, but it has already passed
the shutdown check, then when it resumes it will add a grpc_call to
the completion queue that is leaked. We fix this by explicitly freeing
such calls after all worker threads have shutdown.
To manifest the leak, run the end2end::ClientCancelsRequestStream
test repeatedly on the unpatched server implementation. About 0.5% of
the time, the leak will manifest.
* Use templates instead of generating them every time
* Theme changed
* Add grpc_* modules
* APIs grouped
* No documentation for class members without docstring
* Add docstring for status code
* Include unit tests to test default behaviour, disable behaviour, enable behaviour of the wait-for-ready mechanism
* Import flags constants from grpc_types.h
* Use WaitGroup to wait for TRANSIENT_FAILURE state in unit test
Using a conditional branch to set a function pointer will prevent the
compiler to inline the function and worse it would jump based on a
register value killing the pipline.
Here is a short example to demonstrate the variants:
https://godbolt.org/z/radfZg
Remove `add_nothing` and add a lambda when necessary to make sure
everything is inlined.
Make sure call_element[0..count] is filled before actually calling
`init_call_elem` of the filters, because they would trash the cache.
This improves BM_StreamingPingPong<TCP, ...> by 3%.
* Fix typos.
* Correct pointers to example files.
* Refer to v1.17 or 1.17.0 throughout.
* Change wording where requested, remove trailer.
* Rename INTEGRATION.md -> BUILD-INTEGRATION.md.
* Change a pointer in README.md to point to the new name.