Commit 76f9e0d4 authored by Marian Triebe's avatar Marian Triebe

Fix heap-use-after-free in local_migration unit-test

parent 2f9c781e
...@@ -74,38 +74,40 @@ CAF_TEST(migrate_locally) { ...@@ -74,38 +74,40 @@ CAF_TEST(migrate_locally) {
auto a = spawn<migratable_actor>(); auto a = spawn<migratable_actor>();
auto b = spawn<migratable_actor>(); auto b = spawn<migratable_actor>();
auto mm1 = spawn(pseudo_mm, b); auto mm1 = spawn(pseudo_mm, b);
scoped_actor self; { // Lifetime scope of scoped_actor
self->send(a, put_atom::value, 42); scoped_actor self;
// migrate from a to b self->send(a, put_atom::value, 42);
self->sync_send(a, sys_atom::value, migrate_atom::value, mm1).await( // migrate from a to b
[&](ok_atom, const actor_addr& dest) { self->sync_send(a, sys_atom::value, migrate_atom::value, mm1).await(
CAF_CHECK(dest == b); [&](ok_atom, const actor_addr& dest) {
} CAF_CHECK(dest == b);
); }
self->sync_send(a, get_atom::value).await( );
[&](int result) { self->sync_send(a, get_atom::value).await(
CAF_CHECK(result == 42); [&](int result) {
CAF_CHECK(self->current_sender() == b.address()); CAF_CHECK(result == 42);
} CAF_CHECK(self->current_sender() == b.address());
); }
auto mm2 = spawn(pseudo_mm, a); );
self->send(b, put_atom::value, 23); auto mm2 = spawn(pseudo_mm, a);
// migrate back from b to a self->send(b, put_atom::value, 23);
self->sync_send(b, sys_atom::value, migrate_atom::value, mm2).await( // migrate back from b to a
[&](ok_atom, const actor_addr& dest) { self->sync_send(b, sys_atom::value, migrate_atom::value, mm2).await(
CAF_CHECK(dest == a); [&](ok_atom, const actor_addr& dest) {
} CAF_CHECK(dest == a);
); }
self->sync_send(b, get_atom::value).await( );
[&](int result) { self->sync_send(b, get_atom::value).await(
CAF_CHECK(result == 23); [&](int result) {
CAF_CHECK(self->current_sender() == a.address()); CAF_CHECK(result == 23);
} CAF_CHECK(self->current_sender() == a.address());
); }
self->send_exit(a, exit_reason::kill); );
self->send_exit(b, exit_reason::kill); self->send_exit(a, exit_reason::kill);
self->send_exit(mm1, exit_reason::kill); self->send_exit(b, exit_reason::kill);
self->send_exit(mm2, exit_reason::kill); self->send_exit(mm1, exit_reason::kill);
self->await_all_other_actors_done(); self->send_exit(mm2, exit_reason::kill);
self->await_all_other_actors_done();
}
shutdown(); shutdown();
} }
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