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