Update thread-private work count when epoll operations are not complete.
This commit is contained in:
parent
5ab5356e33
commit
fcf901ecb3
@ -635,7 +635,7 @@ struct epoll_reactor::perform_io_cleanup_on_block_exit
|
|||||||
// No user-initiated operations have completed, so we need to compensate
|
// No user-initiated operations have completed, so we need to compensate
|
||||||
// for the work_finished() call that the scheduler will make once this
|
// for the work_finished() call that the scheduler will make once this
|
||||||
// operation returns.
|
// operation returns.
|
||||||
reactor_->scheduler_.work_started();
|
reactor_->scheduler_.compensating_work_started();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,6 +243,12 @@ void scheduler::restart()
|
|||||||
stopped_ = false;
|
stopped_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scheduler::compensating_work_started()
|
||||||
|
{
|
||||||
|
thread_info_base* this_thread = thread_call_stack::contains(this);
|
||||||
|
++static_cast<thread_info*>(this_thread)->private_outstanding_work;
|
||||||
|
}
|
||||||
|
|
||||||
void scheduler::post_immediate_completion(
|
void scheduler::post_immediate_completion(
|
||||||
scheduler::operation* op, bool is_continuation)
|
scheduler::operation* op, bool is_continuation)
|
||||||
{
|
{
|
||||||
|
@ -79,6 +79,10 @@ public:
|
|||||||
++outstanding_work_;
|
++outstanding_work_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Used to compensate for a forthcoming work_finished call. Must be called
|
||||||
|
// from within a scheduler-owned thread.
|
||||||
|
ASIO_DECL void compensating_work_started();
|
||||||
|
|
||||||
// Notify that some work has finished.
|
// Notify that some work has finished.
|
||||||
void work_finished()
|
void work_finished()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user