Skip to content

1.1.0

Latest

Choose a tag to compare

@Neverlord Neverlord released this 25 Jun 13:41
· 293 commits to main since this release

Changed

  • Add intermediary types for the mail API as [[nodiscard]] to make it easier
    to spot mistakes when chaining calls.
  • The merge and flat_map operators now accept an optional unsigned integer
    parameter to configure the maximum number of concurrent subscriptions.
  • If an actor terminates, it will now consistently send error messages with code
    caf::sec::request_receiver_down to all outstanding requests. Any request
    that arrives after an actor has closed its mailbox will receive the same error
    code. This change makes it easier to handle errors in a consistent way and to
    distinguish between requests that have been dropped and those that resulted in
    an error while processing the request (#2070).
  • The URI parser in CAF now accepts URIs that use reserved characters such as
    *, / or ? in the query string. This change follows the recommendation in
    the RFC 3986, which states that "query components are often used to carry
    identifying information in the form of key=value pairs and one frequently used
    value is a reference to another URI".
  • CAF now respects CPU limits when running in a container to determine the
    thread pool size for the scheduler (#2061).

Added

  • New flow operators: retry, combine_latest, debounce, throttle_first
    and on_error_resume_next.
  • New with_userinfo member function for URIs that allows setting the user-info
    sub-component without going through an URI builder.
  • CAF now supports chunked encoding for HTTP clients (#2038).
  • Added a missing configuration option to the HTTP client API that allows
    users to set the maximum size of the response.
  • Add functions to the SSL API to enable Server Name Indication (SNI, #2084).
  • Add throttle_last to observables: an alias for sample.

Fixed

  • Fix build error in caf-net when building with C++23 (#1919).
  • Restructure some implementation details of intrsuive_ptr (no functional
    changes) to make it easier for clang-tidy to analyze the code. This fixes a
    false positive reported by clang-tidy in some use cases where clang-tidy
    would falsely report a use-after-free bug.
  • Closing a WebSocket connection now properly sends a close frame to the client
    before closing the TCP connection (#1938).
  • Fix a build error in the unit tests when building with C++20 and setting
    CAF_USE_STD_FORMAT to ON (#1963).
  • The functions run_scheduled, run_scheduled_weak, run_delayed and
    run_delayed_weak now properly accept move-only callback types.
  • Fix the conversion from invalid actor handles to raw pointers when using
    actor_cast. This resolves an issue with send that could lead to undefined
    behavior (#1972).
  • Add missing export declaration for the caf::net::prometheus symbol (#2042).
  • Boolean flags now accept arguments on the command line (#2048). For example,
    --foo=true is now equivalent to --foo and --foo=false will set the flag
    to false. Short options like -f only accept the argument when passing it
    without a space, e.g., -ffalse.
  • The buffer and interval operators now properly check the time period
    parameter and produce an error if the period is zero or negative (#2030).
    Passing an invalid delay parameter to to_stream or to_typed_stream
    likewise produces a stream that immediately calls on_error on any client
    that tries to subscribe to it.
  • Use localtime_s on all Windows platforms to fix a build error with
    MSYS/UCRT64 (#2059).
  • Fix rendering of nested JSON lists (#2068).
  • Add missing pragma once guards to multiple headers under caf/net/ssl/.
  • Fix the behavior of use_certificate_file_if and use_private_key_file_if.
    Both functions did not leave the caf::net::ssl::context unchanged if one of
    the arguments was invalid but instead applied the invalid arguments to the
    context regardless, resulting in an OpenSSL error.
  • Fix a bug in the HTTP parser that could cause the parser to try parsing the
    payload as a new request.
  • Fix a startup issue when configuring Prometheus export on caf.net (#2060).
    This bug caused the Prometheus server to never start up unless starting at
    least one other asynchronous server or client using the caf.net API.
  • Fix a bug in the URI parser that could crash the application when parsing an
    URI with a percent-encoded character at the end of the string (#2080).
  • Fix parsing of HTTP request headers that do not use the absolute path syntax
    in the first line (#2074).
  • Optimize templates for compile-time checks used by typed behaviors. This
    drastically reduces memory usage during compilation and avoids OOM errors when
    spawning typed actors with a large number of message handlers (#1970).
  • BDD outlines now properly handle multiple WHEN blocks in a single
    scenario (#1776).
  • Fix build issues on Clang 20 when building in C++20 mode (#2092).