ThreadPoolTaskExecutor::WorkQueue ThreadPoolTaskExecutor::makeSingletonWorkQueue(CallbackFn work, Date_t when) { WorkQueue result; result.emplace_front(CallbackState::make(std::move(work), when)); result.front()->iter = result.begin(); return result; }
StatusWith<ReplicationExecutor::CallbackHandle> ReplicationExecutor::scheduleWorkAt( Date_t when, const CallbackFn& work) { boost::lock_guard<boost::mutex> lk(_mutex); WorkQueue temp; StatusWith<CallbackHandle> cbHandle = enqueueWork_inlock(&temp, work); if (!cbHandle.isOK()) return cbHandle; cbHandle.getValue()._iter->readyDate = when; WorkQueue::iterator insertBefore = _sleepersQueue.begin(); while (insertBefore != _sleepersQueue.end() && insertBefore->readyDate <= when) ++insertBefore; _sleepersQueue.splice(insertBefore, temp, temp.begin()); return cbHandle; }