void NodeVersionLoader::setWatchDogTimer() { auto self = shared_from_this(); checkThread(); timer.expires_from_now(boost::posix_time::seconds(3)); timer.async_wait([this, self] (const error_code& error) { if (error) { return; } if (disposed) { return; } if (state == State::ReceivingData) { auto now = boost::posix_time::second_clock::local_time(); if (now - lastReceiveTime > boost::posix_time::seconds(10)) { BOOST_LOG_SEV(log, LogLevel::Warn) << "Timed out."; socket.cancel(); } else { setWatchDogTimer(); } } }); }
void NodeVersionLoader::receiveData(std::uint64_t size) { auto self = shared_from_this(); checkThread(); state = State::ReceivingData; remainingBytes = size; lastReceiveTime = boost::posix_time::second_clock::local_time(); setWatchDogTimer(); receiveChunk(); }
bool IOWatchDogTimer::start(IOService *provider) { if (!super::start(provider)) return false; notifier = registerSleepWakeInterest(IOWatchDogTimerSleepHandler, this); if (notifier == 0) return false; setProperty(kWatchDogEnabledProperty, kOSBooleanFalse); setWatchDogTimer(0); registerService(); return true; }
IOReturn IOWatchDogTimer::setProperties(OSObject *properties) { OSNumber *theNumber; UInt32 theValue; IOReturn result; result = IOUserClient::clientHasPrivilege(current_task(), kIOClientPrivilegeAdministrator); if (result != kIOReturnSuccess) return kIOReturnNotPrivileged; theNumber = OSDynamicCast(OSNumber, properties); if (theNumber == 0) return kIOReturnBadArgument; theValue = theNumber->unsigned32BitValue(); if (theValue == 0) { setProperty(kWatchDogEnabledProperty, kOSBooleanFalse); } else { setProperty(kWatchDogEnabledProperty, kOSBooleanTrue); } setWatchDogTimer(theValue); return kIOReturnSuccess; }
void IOWatchDogTimer::stop(IOService *provider) { setWatchDogTimer(0); notifier->remove(); }