Commit 37a96d85 authored by Dominik Charousset's avatar Dominik Charousset

Make message_data::copy exception-safe

parent 3f59e8d4
...@@ -62,18 +62,17 @@ message_data* message_data::copy() const { ...@@ -62,18 +62,17 @@ message_data* message_data::copy() const {
auto vptr = malloc(total_size); auto vptr = malloc(total_size);
if (vptr == nullptr) if (vptr == nullptr)
CAF_RAISE_ERROR(std::bad_alloc, "bad_alloc"); CAF_RAISE_ERROR(std::bad_alloc, "bad_alloc");
auto ptr = new (vptr) message_data(types_); intrusive_ptr<message_data> ptr{new (vptr) message_data(types_), false};
auto src = storage(); auto src = storage();
auto dst = ptr->storage(); auto dst = ptr->storage();
for (auto id : types_) { for (auto id : types_) {
auto& meta = gmos[id]; auto& meta = gmos[id];
// TODO: exception handling.
meta.copy_construct(dst, src); meta.copy_construct(dst, src);
++ptr->constructed_elements_; ++ptr->constructed_elements_;
src += meta.padded_size; src += meta.padded_size;
dst += meta.padded_size; dst += meta.padded_size;
} }
return ptr; return ptr.release();
} }
byte* message_data::at(size_t index) noexcept { byte* message_data::at(size_t index) noexcept {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment