示例#1
0
	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();
				}
			}
		});
	}
示例#2
0
	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();
	}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
void IOWatchDogTimer::stop(IOService *provider)
{
  setWatchDogTimer(0);
  notifier->remove();
}