Remove #ifdefed-out code
This commit is contained in:
parent
e5666cca54
commit
b34a222dc5
2 changed files with 1 additions and 113 deletions
|
|
@ -187,33 +187,17 @@ namespace fc {
|
||||||
}
|
}
|
||||||
|
|
||||||
// mark all ready tasks (should be everyone)... as canceled
|
// mark all ready tasks (should be everyone)... as canceled
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
for (fc::context* ready_context : my->ready_heap)
|
for (fc::context* ready_context : my->ready_heap)
|
||||||
ready_context->canceled = true;
|
ready_context->canceled = true;
|
||||||
#else
|
|
||||||
cur = my->ready_head;
|
|
||||||
while( cur ) {
|
|
||||||
cur->canceled = true;
|
|
||||||
cur = cur->next;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
my->done = true;
|
my->done = true;
|
||||||
|
|
||||||
// now that we have poked all fibers... switch to the next one and
|
// now that we have poked all fibers... switch to the next one and
|
||||||
// let them all quit.
|
// let them all quit.
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
while (!my->ready_heap.empty())
|
while (!my->ready_heap.empty())
|
||||||
{
|
{
|
||||||
my->start_next_fiber(true);
|
my->start_next_fiber(true);
|
||||||
my->check_for_timeouts();
|
my->check_for_timeouts();
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
while (my->ready_head)
|
|
||||||
{
|
|
||||||
my->start_next_fiber(true);
|
|
||||||
my->check_for_timeouts();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
my->clear_free_list();
|
my->clear_free_list();
|
||||||
my->cleanup_thread_specific_data();
|
my->cleanup_thread_specific_data();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
||||||
#include <boost/atomic.hpp>
|
#include <boost/atomic.hpp>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
//#include <fc/logger.hpp>
|
//#include <fc/logger.hpp>
|
||||||
#define READY_LIST_IS_HEAP
|
|
||||||
|
|
||||||
namespace fc {
|
namespace fc {
|
||||||
struct sleep_priority_less {
|
struct sleep_priority_less {
|
||||||
|
|
@ -26,10 +25,6 @@ namespace fc {
|
||||||
done(false),
|
done(false),
|
||||||
current(0),
|
current(0),
|
||||||
pt_head(0),
|
pt_head(0),
|
||||||
#ifndef READY_LIST_IS_HEAP
|
|
||||||
ready_head(0),
|
|
||||||
ready_tail(0),
|
|
||||||
#endif
|
|
||||||
blocked(0),
|
blocked(0),
|
||||||
next_unused_task_storage_slot(0)
|
next_unused_task_storage_slot(0)
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
|
@ -45,18 +40,9 @@ namespace fc {
|
||||||
{
|
{
|
||||||
delete current;
|
delete current;
|
||||||
fc::context* temp;
|
fc::context* temp;
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
for (fc::context* ready_context : ready_heap)
|
for (fc::context* ready_context : ready_heap)
|
||||||
delete ready_context;
|
delete ready_context;
|
||||||
ready_heap.clear();
|
ready_heap.clear();
|
||||||
#else
|
|
||||||
while (ready_head)
|
|
||||||
{
|
|
||||||
temp = ready_head->next;
|
|
||||||
delete ready_head;
|
|
||||||
ready_head = temp;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
while (blocked)
|
while (blocked)
|
||||||
{
|
{
|
||||||
temp = blocked->next;
|
temp = blocked->next;
|
||||||
|
|
@ -98,12 +84,7 @@ namespace fc {
|
||||||
|
|
||||||
fc::context* pt_head; // list of contexts that can be reused for new tasks
|
fc::context* pt_head; // list of contexts that can be reused for new tasks
|
||||||
|
|
||||||
#ifdef READY_LIST_IS_HEAP
|
std::vector<fc::context*> ready_heap; // priority heap of contexts that are ready to run
|
||||||
std::vector<fc::context*> ready_heap;
|
|
||||||
#else
|
|
||||||
fc::context* ready_head; // linked list (using 'next') of contexts that are ready to run
|
|
||||||
fc::context* ready_tail;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fc::context* blocked; // linked list of contexts (using 'next_blocked') blocked on promises via wait()
|
fc::context* blocked; // linked list of contexts (using 'next_blocked') blocked on promises via wait()
|
||||||
|
|
||||||
|
|
@ -188,67 +169,18 @@ namespace fc {
|
||||||
|
|
||||||
fc::context::ptr ready_pop_front()
|
fc::context::ptr ready_pop_front()
|
||||||
{
|
{
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
fc::context* highest_priority_context = ready_heap.front();
|
fc::context* highest_priority_context = ready_heap.front();
|
||||||
std::pop_heap(ready_heap.begin(), ready_heap.end(), task_priority_less());
|
std::pop_heap(ready_heap.begin(), ready_heap.end(), task_priority_less());
|
||||||
ready_heap.pop_back();
|
ready_heap.pop_back();
|
||||||
return highest_priority_context;
|
return highest_priority_context;
|
||||||
#else
|
|
||||||
fc::context::ptr tmp = nullptr;
|
|
||||||
if( ready_head )
|
|
||||||
{
|
|
||||||
tmp = ready_head;
|
|
||||||
ready_head = tmp->next;
|
|
||||||
if( !ready_head )
|
|
||||||
ready_tail = nullptr;
|
|
||||||
tmp->next = nullptr;
|
|
||||||
}
|
|
||||||
return tmp;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_context_to_ready_list(context* context_to_add, bool at_end = false)
|
void add_context_to_ready_list(context* context_to_add, bool at_end = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
context_to_add->context_posted_num = next_posted_num++;
|
context_to_add->context_posted_num = next_posted_num++;
|
||||||
ready_heap.push_back(context_to_add);
|
ready_heap.push_back(context_to_add);
|
||||||
std::push_heap(ready_heap.begin(), ready_heap.end(), task_priority_less());
|
std::push_heap(ready_heap.begin(), ready_heap.end(), task_priority_less());
|
||||||
#else
|
|
||||||
# if 1
|
|
||||||
if (at_end)
|
|
||||||
{
|
|
||||||
if (!ready_tail)
|
|
||||||
{
|
|
||||||
ready_head = context_to_add;
|
|
||||||
context_to_add->context_posted_num = next_posted_num + 100000;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
context_to_add->context_posted_num = next_posted_num++;
|
|
||||||
ready_tail->next = context_to_add;
|
|
||||||
}
|
|
||||||
ready_tail = context_to_add;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
context_to_add->context_posted_num = next_posted_num++;
|
|
||||||
context_to_add->next = ready_head;
|
|
||||||
ready_head = context_to_add;
|
|
||||||
if (!ready_tail)
|
|
||||||
ready_tail = context_to_add;
|
|
||||||
}
|
|
||||||
# else
|
|
||||||
if (!ready_tail)
|
|
||||||
ready_head = context_to_add;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
context_to_add->context_posted_num = next_posted_num++;
|
|
||||||
ready_tail->next = context_to_add;
|
|
||||||
}
|
|
||||||
ready_tail = context_to_add;
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct task_priority_less
|
struct task_priority_less
|
||||||
|
|
@ -441,11 +373,7 @@ namespace fc {
|
||||||
priority original_priority = current->prio;
|
priority original_priority = current->prio;
|
||||||
|
|
||||||
// check to see if any other contexts are ready
|
// check to see if any other contexts are ready
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
if (!ready_heap.empty())
|
if (!ready_heap.empty())
|
||||||
#else
|
|
||||||
if (ready_head)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
fc::context* next = ready_pop_front();
|
fc::context* next = ready_pop_front();
|
||||||
if (next == current)
|
if (next == current)
|
||||||
|
|
@ -599,20 +527,11 @@ namespace fc {
|
||||||
|
|
||||||
if (!task_pqueue.empty())
|
if (!task_pqueue.empty())
|
||||||
{
|
{
|
||||||
#if 1
|
|
||||||
if (task_pqueue.front()->_prio.value != priority::max().value &&
|
if (task_pqueue.front()->_prio.value != priority::max().value &&
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
!ready_heap.empty())
|
!ready_heap.empty())
|
||||||
#else
|
|
||||||
ready_head)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
// a new task and an existing task are both ready to go
|
// a new task and an existing task are both ready to go
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
if (task_priority_less()(ready_heap.front(), task_pqueue.front()))
|
if (task_priority_less()(ready_heap.front(), task_pqueue.front()))
|
||||||
#else
|
|
||||||
if (ready_head->context_posted_num < task_pqueue.front()->_posted_num)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
// run the existing task first
|
// run the existing task first
|
||||||
pt_push_back(current);
|
pt_push_back(current);
|
||||||
|
|
@ -620,7 +539,6 @@ namespace fc {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// if we made it here, either there's no ready context, or the ready context is
|
// if we made it here, either there's no ready context, or the ready context is
|
||||||
// scheduled after the ready task, so we should run the task first
|
// scheduled after the ready task, so we should run the task first
|
||||||
|
|
@ -630,11 +548,7 @@ namespace fc {
|
||||||
|
|
||||||
// if I have something else to do other than
|
// if I have something else to do other than
|
||||||
// process tasks... do it.
|
// process tasks... do it.
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
if (!ready_heap.empty())
|
if (!ready_heap.empty())
|
||||||
#else
|
|
||||||
if (ready_head)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
pt_push_back( current );
|
pt_push_back( current );
|
||||||
start_next_fiber(false);
|
start_next_fiber(false);
|
||||||
|
|
@ -846,18 +760,8 @@ namespace fc {
|
||||||
{
|
{
|
||||||
if ((*sleep_iter)->canceled)
|
if ((*sleep_iter)->canceled)
|
||||||
{
|
{
|
||||||
#ifdef READY_LIST_IS_HEAP
|
|
||||||
bool already_on_ready_list = std::find(ready_heap.begin(), ready_heap.end(),
|
bool already_on_ready_list = std::find(ready_heap.begin(), ready_heap.end(),
|
||||||
*sleep_iter) != ready_heap.end();
|
*sleep_iter) != ready_heap.end();
|
||||||
#else
|
|
||||||
bool already_on_ready_list = false;
|
|
||||||
for (fc::context* ready_iter = ready_head; ready_iter; ready_iter = ready_iter->next)
|
|
||||||
if (ready_iter == *sleep_iter)
|
|
||||||
{
|
|
||||||
already_on_ready_list = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (!already_on_ready_list)
|
if (!already_on_ready_list)
|
||||||
add_context_to_ready_list(*sleep_iter);
|
add_context_to_ready_list(*sleep_iter);
|
||||||
sleep_iter = sleep_pqueue.erase(sleep_iter);
|
sleep_iter = sleep_pqueue.erase(sleep_iter);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue