Skip to content

v1.5.0

Compare
Choose a tag to compare
@Tradias Tradias released this 28 Mar 17:20
· 733 commits to master since this release

Features

  • Add agrpc::bind_allocator which associates an allocator to a completion token's completion handler. Similar to the new asio::bind_allocator except that it also works in older versions of Asio and provides empty class optimization on the allocator.
  • Add agrpc::GrpcContext.poll() which processes only completed handler.
  • Adjust the behavior of a stopped agrpc::GrpcContext to mimic that of asio::io_context. Operations submitted to a stopped context will no longer be discarded and instead processed the next time run() or poll() is called.
  • (experimental) Add agrpc::PollContext which repeatedly polls a agrpc::GrpcContext within a different execution context. An example showing how this can be used to run an asio::io_context and agrpc::GrpcContext on the same thread has been added as well.

Fixes

  • Certain headers did not work without also including other headers.

Performance

  • Executor binder, allocator binder and cancellation slot binder are now unbound from completion handlers in RPC functions, thereby reducing the memory allocation size.
  • Avoid one dynamic memory allocation per request in agrpc::repeatedly_request with awaitable.

Style

  • Remove deprecated agrpc::use_scheduler.

Documentation

  • Add example that shows how to process a bidirectional stream by dispatching work to a thread_pool.
  • Add example that performs double-buffered, allocation-free file transfer using gRPC and io_uring.
  • Update doxygen-awesome to 2.0.2.

Chore

  • Run msvc-code-analysis alongside CodeQL every week.
  • Update vcpkg and use manifest mode and CMake presets in github actions. Also compile dependencies in release only.
  • Add several /Zc flags when compiling with MSVC to make it more C++-standard compliant.