void Scheduler::RemoveItem(boost::shared_ptr<Schedule> item) { LOG_AM_TRACE("Entering function %s", __FUNCTION__); LOG_AM_DEBUG("Removing [Activity %llu]", item->GetActivity()->GetId()); try { /* Do NOT attempt to get an iterator to an item that isn't in a * container. */ if (item->m_queueItem.is_linked()) { bool updateWake = false; /* If the item is at the head of either queue, the time might * have changed. Otherwise, it definitely didn't. */ if (item->IsLocal()) { if (m_localQueue.iterator_to(*item) == m_localQueue.begin()) { updateWake = true; } } else { if (m_queue.iterator_to(*item) == m_queue.begin()) { updateWake = true; } } item->m_queueItem.unlink(); if (updateWake) { DequeueAndUpdateTimeout(); } } } catch (...) { } }
void Scheduler::AddItem(boost::shared_ptr<Schedule> item) { LOG_AM_TRACE("Entering function %s", __FUNCTION__); LOG_AM_DEBUG( "Adding [Activity %llu] to start at %llu (%s)", item->GetActivity()->GetId(), (unsigned long long)item->GetNextStartTime(), TimeToString(item->GetNextStartTime(), !item->IsLocal()).c_str()); bool updateWake = false; if (item->IsLocal()) { m_localQueue.insert(*item); if (m_localQueue.iterator_to(*item) == m_localQueue.begin()) { updateWake = true; } } else { m_queue.insert(*item); if (m_queue.iterator_to(*item) == m_queue.begin()) { updateWake = true; } } if (updateWake) { DequeueAndUpdateTimeout(); } }