public:
void queue(Context *c, int r = 0) {
finisher_lock.Lock();
+ if (finisher_queue.empty()) {
+ finisher_cond.Signal();
+ }
if (r) {
finisher_queue_rval.push_back(pair<Context*, int>(c, r));
finisher_queue.push_back(NULL);
} else
finisher_queue.push_back(c);
- finisher_cond.Signal();
if (logger)
logger->inc(l_finisher_queue_len);
finisher_lock.Unlock();
}
void queue(vector<Context*>& ls) {
finisher_lock.Lock();
+ if (finisher_queue.empty()) {
+ finisher_cond.Signal();
+ }
finisher_queue.insert(finisher_queue.end(), ls.begin(), ls.end());
- finisher_cond.Signal();
if (logger)
logger->inc(l_finisher_queue_len, ls.size());
finisher_lock.Unlock();
}
void queue(deque<Context*>& ls) {
finisher_lock.Lock();
+ if (finisher_queue.empty()) {
+ finisher_cond.Signal();
+ }
finisher_queue.insert(finisher_queue.end(), ls.begin(), ls.end());
- finisher_cond.Signal();
if (logger)
logger->inc(l_finisher_queue_len, ls.size());
finisher_lock.Unlock();
}
void queue(list<Context*>& ls) {
finisher_lock.Lock();
+ if (finisher_queue.empty()) {
+ finisher_cond.Signal();
+ }
finisher_queue.insert(finisher_queue.end(), ls.begin(), ls.end());
- finisher_cond.Signal();
if (logger)
logger->inc(l_finisher_queue_len, ls.size());
finisher_lock.Unlock();