fix Timer ownership

This commit is contained in:
Michael Davidsaver
2022-10-11 19:08:24 -07:00
parent 0eea8fd1c7
commit 06f1a8c2db
2 changed files with 36 additions and 17 deletions
+10 -7
View File
@@ -373,24 +373,27 @@ struct Tester {
{
testShow()<<__func__;
epicsEvent done;
Timer slowdown;
// ref'd by both put and timer functors
auto done(std::make_shared<epicsEvent>());
// ref'd by put functor
auto slowdown(std::make_shared<Timer>());
mbox.onPut([this, &done, &slowdown](server::SharedPV& pv, std::unique_ptr<server::ExecOp>&& rawop, Value&& rawval) {
mbox.onPut([this, done, slowdown](server::SharedPV& pv,
std::unique_ptr<server::ExecOp>&& rawop, Value&& rawval) {
// on server worker
std::shared_ptr<server::ExecOp> op(std::move(rawop));
auto val(std::move(rawval));
testPass("In onPut");
slowdown = op->timerOneShot(0.01, [](){
*slowdown = op->timerOneShot(0.01, [](){
testFail("I should not run.");
});
testTrue(slowdown.cancel());
testTrue(slowdown->cancel());
slowdown = op->timerOneShot(0.01, [this, &done, op, val](){
*slowdown = op->timerOneShot(0.01, [this, done, op, val](){
testPass("I should run");
done.signal();
done->signal();
mbox.post(val);
op->reply();
});