7 #include <tbb/atomic.h>
9 #include <boost/bind.hpp>
10 #include <boost/foreach.hpp>
31 tbb::mutex::scoped_lock lock(
mutex_);
40 bool walk_table =
false;
42 if (walker->stopped())
continue;
43 walker->set_in_progress();
44 walker->reset_walk_again();
52 current_table_walk_.clear();
62 if (walker->walk_again())
63 walker->set_walk_requested();
64 else if (!walker->stopped())
65 walker->set_walk_done();
66 if (walker->stopped() || walker->walk_again())
continue;
67 walker->walk_complete()(walker, walker->table());
69 current_table_walk_.clear();
82 ref->set_walk_stopped();
91 tbb::mutex::scoped_lock lock(
mutex_);
94 if (walk->in_progress()) {
96 walk->set_walk_again();
99 walk->set_walk_requested();
105 (*it)->AppendWalkReq(walk);
121 uint32_t skip_walk_count = 0;
123 if (walker->done() || walker->stopped() || walker->walk_again()) {
127 bool more = walker->walk_fn()(part, entry);
130 if (!walker->stopped()) walker->set_walk_done();
133 return (skip_walk_count < current_table_walk_.size());
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
bool ProcessWalkRequestList()
WalkRequestInfoSet walk_request_set_
DBTable::DBTableWalkRef AllocWalker(DBTable *table, DBTable::WalkFn walk_fn, DBTable::WalkCompleteFn walk_complete)
void WalkTable(DBTable::DBTableWalkRef walk)
boost::function< void(DBTableWalkRef, DBTableBase *)> WalkCompleteFn
void AppendWalkReq(DBTable::DBTableWalkRef ref)
void ReleaseWalker(DBTable::DBTableWalkRef &walk)
boost::scoped_ptr< TaskTrigger > walk_done_trigger_
#define CHECK_CONCURRENCY(...)
void WalkAgain(DBTable::DBTableWalkRef walk)
WalkRequestInfoList walk_request_list_
boost::shared_ptr< WalkRequestInfo > WalkRequestInfoPtr
boost::function< bool(DBTablePartBase *, DBEntryBase *)> WalkFn
bool InvokeWalkCb(DBTablePartBase *part, DBEntryBase *entry)
boost::scoped_ptr< TaskTrigger > walk_request_trigger_
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
void incr_walk_again_count()
void incr_walk_request_count()
WalkReqList current_table_walk_