diff --git a/include/cppkafka/clonable_ptr.h b/include/cppkafka/clonable_ptr.h index 4f0f323..7b25b17 100644 --- a/include/cppkafka/clonable_ptr.h +++ b/include/cppkafka/clonable_ptr.h @@ -60,8 +60,7 @@ public: * \param rhs The pointer to be copied */ ClonablePtr(const ClonablePtr& rhs) - : handle_(rhs.get_cloner() ? std::unique_ptr(rhs.clone(), rhs.get_deleter()) : - std::unique_ptr(rhs.get(), rhs.get_deleter())), + : handle_(std::unique_ptr(rhs.clone(), rhs.get_deleter())), cloner_(rhs.get_cloner()) { } @@ -73,8 +72,7 @@ public: */ ClonablePtr& operator=(const ClonablePtr& rhs) { if (this != &rhs) { - handle_ = rhs.get_cloner() ? std::unique_ptr(rhs.clone(), rhs.get_deleter()) : - std::unique_ptr(rhs.get(), rhs.get_deleter()); + handle_ = std::unique_ptr(rhs.clone(), rhs.get_deleter()); cloner_ = rhs.get_cloner(); } return *this; @@ -130,7 +128,7 @@ private: * \brief Clones the internal pointer using the specified cloner function. */ T* clone() const { - return cloner_ ? cloner_(handle_.get()) : handle_.get(); + return cloner_ ? cloner_(get()) : get(); } std::unique_ptr handle_; diff --git a/include/cppkafka/header_list.h b/include/cppkafka/header_list.h index 20e60a8..313996f 100644 --- a/include/cppkafka/header_list.h +++ b/include/cppkafka/header_list.h @@ -159,11 +159,6 @@ public: */ explicit operator bool() const; - /** - * \brief Indicates if this list owns the underlying handle or not. - */ - bool is_owning() const; - private: struct NonOwningTag { }; static void dummy_deleter(rd_kafka_headers_t*) {} @@ -313,11 +308,6 @@ HeaderList::operator bool() const { return static_cast(handle_); } -template -bool HeaderList::is_owning() const { - return handle_.get_deleter() != &dummy_deleter; -} - } //namespace cppkafka #endif //RD_KAFKA_HEADERS_SUPPORT_VERSION diff --git a/include/cppkafka/message.h b/include/cppkafka/message.h index 8007aee..22a2880 100644 --- a/include/cppkafka/message.h +++ b/include/cppkafka/message.h @@ -129,23 +129,13 @@ public: #if (RD_KAFKA_VERSION >= RD_KAFKA_HEADERS_SUPPORT_VERSION) /** * \brief Sets the message's header list. - * \note After this call, the Message will take ownership of the header list. + * \note This calls rd_kafka_message_set_headers. */ void set_header_list(const HeaderListType& headers) { assert(handle_); - assert(!headers.is_owning()); - rd_kafka_message_set_headers(handle_.get(), headers.get_handle()); - header_list_ = HeaderListType::make_non_owning(headers.get_handle()); - } - - /** - * \brief Sets the message's header list. - * \note After this call, the Message will take ownership of the header list. - */ - void set_header_list(HeaderListType&& headers) { - assert(handle_); - rd_kafka_message_set_headers(handle_.get(), headers.get_handle()); - header_list_ = HeaderListType::make_non_owning(headers.release_handle()); + rd_kafka_headers_t* handle_copy = rd_kafka_headers_copy(headers.get_handle()); + rd_kafka_message_set_headers(handle_.get(), handle_copy); + header_list_ = HeaderListType::make_non_owning(handle_copy); } /**