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
a9878bbc
Commit
a9878bbc
authored
Oct 13, 2015
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'ufownl-topic/fix_timeout_handler' into develop
parents
facb47d8
47cc4116
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
14 additions
and
8 deletions
+14
-8
libcaf_core/caf/local_actor.hpp
libcaf_core/caf/local_actor.hpp
+2
-1
libcaf_core/src/local_actor.cpp
libcaf_core/src/local_actor.cpp
+12
-7
No files found.
libcaf_core/caf/local_actor.hpp
View file @
a9878bbc
...
...
@@ -431,7 +431,8 @@ public:
/// @cond PRIVATE
// handle `ptr` in an event-based actor
resumable
::
resume_result
exec_event
(
mailbox_element_ptr
&
ptr
);
std
::
pair
<
resumable
::
resume_result
,
invoke_message_result
>
exec_event
(
mailbox_element_ptr
&
ptr
);
// handle `ptr` in an event-based actor, not suitable to be called in a loop
void
exec_single_event
(
mailbox_element_ptr
&
ptr
);
...
...
libcaf_core/src/local_actor.cpp
View file @
a9878bbc
...
...
@@ -133,6 +133,7 @@ uint32_t local_actor::request_timeout(const duration& d) {
has_timeout
(
true
);
auto
result
=
++
timeout_id_
;
auto
msg
=
make_message
(
timeout_msg
{
++
timeout_id_
});
CAF_LOG_TRACE
(
"send new timeout_msg, "
<<
CAF_ARG
(
timeout_id_
));
if
(
d
.
is_zero
())
{
// immediately enqueue timeout message if duration == 0s
enqueue
(
address
(),
invalid_message_id
,
std
::
move
(
msg
),
host
());
...
...
@@ -711,9 +712,11 @@ resumable::resume_result local_actor::resume(execution_unit* eu,
for
(
size_t
i
=
0
;
i
<
max_throughput
;
++
i
)
{
auto
ptr
=
next_message
();
if
(
ptr
)
{
if
(
exec_event
(
ptr
)
==
resumable
::
resume_result
::
done
)
auto
res
=
exec_event
(
ptr
);
if
(
res
.
first
==
resumable
::
resume_result
::
done
)
return
resumable
::
resume_result
::
done
;
++
handled_msgs
;
if
(
res
.
second
==
im_success
)
++
handled_msgs
;
}
else
{
CAF_LOG_DEBUG
(
"no more element in mailbox; going to block"
);
reset_timeout_if_needed
();
...
...
@@ -765,16 +768,18 @@ resumable::resume_result local_actor::resume(execution_unit* eu,
return
resumable
::
done
;
}
resumable
::
resume_result
local_actor
::
exec_event
(
mailbox_element_ptr
&
ptr
)
{
std
::
pair
<
resumable
::
resume_result
,
invoke_message_result
>
local_actor
::
exec_event
(
mailbox_element_ptr
&
ptr
)
{
auto
&
bhvr
=
awaits_response
()
?
awaited_response_handler
()
:
bhvr_stack
().
back
();
auto
mid
=
awaited_response_id
();
switch
(
invoke_message
(
ptr
,
bhvr
,
mid
))
{
auto
res
=
invoke_message
(
ptr
,
bhvr
,
mid
);
switch
(
res
)
{
case
im_success
:
bhvr_stack
().
cleanup
();
if
(
finalize
())
{
CAF_LOG_DEBUG
(
"actor exited"
);
return
resumable
::
resume_result
::
done
;
return
{
resumable
::
resume_result
::
done
,
res
}
;
}
// continue from cache if current message was
// handled, because the actor might have changed
...
...
@@ -782,7 +787,7 @@ resumable::resume_result local_actor::exec_event(mailbox_element_ptr& ptr) {
while
(
invoke_from_cache
())
{
if
(
finalize
())
{
CAF_LOG_DEBUG
(
"actor exited"
);
return
resumable
::
resume_result
::
done
;
return
{
resumable
::
resume_result
::
done
,
res
}
;
}
}
break
;
...
...
@@ -794,7 +799,7 @@ resumable::resume_result local_actor::exec_event(mailbox_element_ptr& ptr) {
// destroy msg
break
;
}
return
resumable
::
resume_result
::
resume_later
;
return
{
resumable
::
resume_result
::
resume_later
,
res
}
;
}
void
local_actor
::
exec_single_event
(
mailbox_element_ptr
&
ptr
)
{
...
...
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