diff --git a/rmw_zenoh_cpp/src/detail/payload.hpp b/rmw_zenoh_cpp/src/detail/payload.hpp index 8ddcf7be..34e069ef 100644 --- a/rmw_zenoh_cpp/src/detail/payload.hpp +++ b/rmw_zenoh_cpp/src/detail/payload.hpp @@ -29,6 +29,14 @@ class Payload public: explicit Payload(const zenoh::Bytes & bytes) { + // NOTE(fuzzypixelz): `zenoh::Bytes` is an list of reference-couted buffers. When the list of + // buffers contains exactly one element, it is not necessary to concatenate the list of buffers. + // In this case, we store a clone of the bytes object to maintain a non-zero reference-count on + // the buffer. This ensures that the slice into said buffer stays valid until we drop our copy + // of the bytes object (at the very least). This case corresponds to the `Contiguous` + // alternative of the `bytes_` variant and aims to optimize away a memcpy during "session-local" + // communication. + zenoh::Bytes::SliceIterator slices = bytes.slice_iter(); std::optional slice = slices.next(); if (!slice.has_value()) {