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
e555bc8f
Commit
e555bc8f
authored
Jun 05, 2012
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactoring
parent
94c10873
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
14 additions
and
24 deletions
+14
-24
cppa/detail/yielding_actor.hpp
cppa/detail/yielding_actor.hpp
+9
-0
src/abstract_event_based_actor.cpp
src/abstract_event_based_actor.cpp
+1
-3
src/yielding_actor.cpp
src/yielding_actor.cpp
+4
-21
No files found.
cppa/detail/yielding_actor.hpp
View file @
e555bc8f
...
...
@@ -83,6 +83,15 @@ class yielding_actor
util
::
fiber
m_fiber
;
std
::
function
<
void
()
>
m_behavior
;
inline
recursive_queue_node
*
receive_node
()
{
recursive_queue_node
*
e
=
m_mailbox
.
try_pop
();
while
(
e
==
nullptr
)
{
yield_until_not_empty
();
e
=
m_mailbox
.
try_pop
();
}
return
e
;
}
};
}
}
// namespace cppa::detail
...
...
src/abstract_event_based_actor.cpp
View file @
e555bc8f
...
...
@@ -39,9 +39,7 @@
namespace
cppa
{
abstract_event_based_actor
::
abstract_event_based_actor
()
:
super
(
super
::
blocked
)
{
//m_mailbox_pos = m_mailbox.cache().end();
abstract_event_based_actor
::
abstract_event_based_actor
()
:
super
(
super
::
blocked
)
{
}
void
abstract_event_based_actor
::
dequeue
(
behavior
&
)
{
...
...
src/yielding_actor.cpp
View file @
e555bc8f
...
...
@@ -67,7 +67,7 @@ void yielding_actor::yield_until_not_empty() {
if
(
m_mailbox
.
can_fetch_more
()
==
false
)
{
m_state
.
store
(
abstract_scheduled_actor
::
about_to_block
);
CPPA_MEMORY_BARRIER
();
// make sure mailbox is
'empty'
// make sure mailbox is
empty
if
(
m_mailbox
.
can_fetch_more
()
==
false
)
{
m_state
.
store
(
abstract_scheduled_actor
::
ready
);
return
;
...
...
@@ -80,23 +80,14 @@ void yielding_actor::yield_until_not_empty() {
void
yielding_actor
::
dequeue
(
partial_function
&
fun
)
{
if
(
invoke_from_cache
(
fun
)
==
false
)
{
recursive_queue_node
*
e
=
nullptr
;
do
{
e
=
m_mailbox
.
try_pop
();
while
(
!
e
)
{
yield_until_not_empty
();
e
=
m_mailbox
.
try_pop
();
}
}
while
(
invoke
(
e
,
fun
)
==
false
);
while
(
invoke
(
receive_node
(),
fun
)
==
false
)
{
}
}
}
void
yielding_actor
::
dequeue
(
behavior
&
bhvr
)
{
auto
&
fun
=
bhvr
.
get_partial_function
();
if
(
bhvr
.
timeout
().
valid
()
==
false
)
{
// suppress virtual function call
yielding_actor
::
dequeue
(
fun
);
yielding_actor
::
dequeue
(
bhvr
.
get_partial_function
()
);
}
else
if
(
invoke_from_cache
(
bhvr
)
==
false
)
{
if
(
bhvr
.
timeout
().
is_zero
())
{
...
...
@@ -108,15 +99,7 @@ void yielding_actor::dequeue(behavior& bhvr) {
}
else
{
request_timeout
(
bhvr
.
timeout
());
recursive_queue_node
*
e
=
nullptr
;
do
{
e
=
m_mailbox
.
try_pop
();
while
(
!
e
)
{
CPPA_REQUIRE
(
e
->
marked
==
false
);
yield_until_not_empty
();
e
=
m_mailbox
.
try_pop
();
}
}
while
(
invoke
(
e
,
bhvr
)
==
false
);
while
(
invoke
(
receive_node
(),
bhvr
)
==
false
)
{
}
}
}
}
...
...
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