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 {
auto vptr = malloc(total_size);
if (vptr == nullptr)
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 dst = ptr->storage();
for (auto id : types_) {
auto& meta = gmos[id];
// TODO: exception handling.
meta.copy_construct(dst, src);
++ptr->constructed_elements_;
src += meta.padded_size;
dst += meta.padded_size;
}
return ptr;
return ptr.release();
}
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