Commit baf0679b authored by Dominik Charousset's avatar Dominik Charousset

Update code that assumed ref counts start at 0

parent ec8ba04f
......@@ -43,6 +43,8 @@ class decorated_tuple : public message_data {
using message_data::cow_ptr;
decorated_tuple(cow_ptr&&, vector_type&&);
// creates a typed subtuple from `d` with mapping `v`
static cow_ptr make(cow_ptr d, vector_type v);
......@@ -72,7 +74,6 @@ class decorated_tuple : public message_data {
}
private:
decorated_tuple(cow_ptr&&, vector_type&&);
decorated_tuple(const decorated_tuple&) = default;
cow_ptr m_decorated;
......
......@@ -83,7 +83,8 @@ class message_data : public ref_counted {
cow_ptr& operator=(cow_ptr&&) = default;
cow_ptr& operator=(const cow_ptr&) = default;
inline cow_ptr(intrusive_ptr<message_data> p) : m_ptr(std::move(p)) {
template <class T>
cow_ptr(intrusive_ptr<T> p) : m_ptr(std::move(p)) {
// nop
}
......
......@@ -311,8 +311,6 @@ class message {
using data_ptr = detail::message_data::cow_ptr;
explicit message(raw_ptr);
explicit message(const data_ptr& vals);
inline data_ptr& vals() {
......
......@@ -37,7 +37,9 @@ actor_proxy::anchor::anchor(actor_proxy* instance) : m_ptr(instance) {
// nop
}
actor_proxy::anchor::~anchor() {}
actor_proxy::anchor::~anchor() {
// nop
}
bool actor_proxy::anchor::expired() const {
return !m_ptr;
......@@ -70,7 +72,8 @@ actor_proxy::~actor_proxy() {
}
actor_proxy::actor_proxy(actor_id aid, node_id nid)
: abstract_actor(aid, nid), m_anchor(new anchor{this}) {
: abstract_actor(aid, nid),
m_anchor(make_counted<anchor>(this)) {
// nop
}
......
......@@ -90,7 +90,7 @@ void behavior_impl::handle_timeout() {
behavior_impl::pointer behavior_impl::or_else(const pointer& other) {
CAF_REQUIRE(other != nullptr);
return new combinator(this, other);
return make_counted<combinator>(this, other);
}
} // namespace detail
......
......@@ -19,6 +19,8 @@
#include "caf/detail/decorated_tuple.hpp"
#include "caf/make_counted.hpp"
namespace caf {
namespace detail {
......@@ -31,7 +33,7 @@ decorated_tuple::cow_ptr decorated_tuple::make(cow_ptr d, vector_type v) {
v[i] = pmap[v[i]];
}
}
return cow_ptr{new decorated_tuple(std::move(d), std::move(v))};
return make_counted<decorated_tuple>(std::move(d), std::move(v));
}
void* decorated_tuple::mutable_at(size_t pos) {
......
......@@ -346,7 +346,8 @@ class local_group_module : public abstract_group::module {
if (i != m_proxies.end()) {
return {i->second};
}
local_group_ptr tmp{new local_group_proxy{broker, this, identifier}};
local_group_ptr tmp = make_counted<local_group_proxy>(broker, this,
identifier);
upgrade_to_unique_guard uguard(guard);
auto p = m_proxies.insert(std::make_pair(broker, tmp));
// someone might preempt us
......
......@@ -30,10 +30,6 @@
namespace caf {
message::message(detail::message_data* ptr) : m_vals(ptr) {
// nop
}
message::message(message&& other) : m_vals(std::move(other.m_vals)) {
// nop
}
......
......@@ -67,7 +67,7 @@ class message_builder::dynamic_msg_data : public detail::message_data {
}
cow_ptr copy() const override {
return cow_ptr(new dynamic_msg_data(*this), false);
return make_counted<dynamic_msg_data>(*this);
}
bool match_element(size_t pos, uint16_t typenr,
......@@ -126,7 +126,7 @@ void message_builder::init() {
// this should really be done by delegating
// constructors, but we want to support
// some compilers without that feature...
m_data.reset(new dynamic_msg_data);
m_data = make_counted<dynamic_msg_data>();
}
void message_builder::clear() {
......@@ -149,7 +149,9 @@ message_builder& message_builder::append(uniform_value what) {
message message_builder::to_message() const {
// this const_cast is safe, because the message is
// guaranteed to detach its data before modifying it
return message{const_cast<dynamic_msg_data*>(data())};
detail::message_data::cow_ptr ptr;
ptr.reset(const_cast<dynamic_msg_data*>(data()));
return message{std::move(ptr)};
}
message message_builder::move_to_message() {
......
......@@ -117,12 +117,13 @@ node_id::node_id(intrusive_ptr<data> dataptr) : m_data(std::move(dataptr)) {
}
node_id::node_id(uint32_t procid, const std::string& b) {
m_data.reset(new data);
m_data = make_counted<data>();
m_data->process_id = procid;
host_id_from_string(b, m_data->host_id);
}
node_id::node_id(uint32_t a, const host_id_type& b) : m_data(new data{a, b}) {
node_id::node_id(uint32_t a, const host_id_type& b)
: m_data(make_counted<data>(a, b)) {
// nop
}
......
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