post() with const ref.

Added "safety" of passing move-able reference
is an illusion since no use_count()==1 test
is done.  Instead extra (shallow) copies
were made for each subscriber.

Instead.  Pass const reference, redefine
MonitorControlOp::post() to transfer ownership,
and make only a single copy in SharedPV::post().
This commit is contained in:
Michael Davidsaver
2020-07-23 11:30:54 -07:00
parent 7debb1fae3
commit 24f3478c98
8 changed files with 29 additions and 21 deletions
+8 -3
View File
@@ -69,7 +69,7 @@ SharedPV SharedPV::buildMailbox()
}
}
pv.post(std::move(val));
pv.post(val);
op->reply();
});
@@ -381,7 +381,7 @@ void SharedPV::close()
}
}
void SharedPV::post(Value&& val)
void SharedPV::post(const Value& val)
{
if(!impl)
throw std::logic_error("Empty SharedPV");
@@ -397,8 +397,13 @@ void SharedPV::post(Value&& val)
impl->current.assign(val);
if(impl->subscribers.empty())
return;
auto copy(val.clone());
for(auto& sub : impl->subscribers) {
sub->post(val.clone());
sub->post(copy);
}
}