Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
76f9e0d4
Commit
76f9e0d4
authored
Sep 01, 2015
by
Marian Triebe
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix heap-use-after-free in local_migration unit-test
parent
2f9c781e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
33 deletions
+35
-33
libcaf_core/test/local_migration.cpp
libcaf_core/test/local_migration.cpp
+35
-33
No files found.
libcaf_core/test/local_migration.cpp
View file @
76f9e0d4
...
@@ -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
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment