watchdog_kick: non-allocating (#22892)

* non-allocating

* unpack

* call kick every second

* cleanup include
pull/21968/head
Dean Lee 3 years ago committed by GitHub
parent 0dcb089254
commit ca88a8769b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      selfdrive/common/watchdog.cc
  2. 3
      selfdrive/manager/process.py
  3. 4
      selfdrive/ui/ui.cc

@ -1,19 +1,12 @@
#include "selfdrive/common/watchdog.h" #include "selfdrive/common/watchdog.h"
#include <unistd.h>
#include <cstdint>
#include <string>
#include "selfdrive/common/timing.h" #include "selfdrive/common/timing.h"
#include "selfdrive/common/util.h" #include "selfdrive/common/util.h"
const std::string watchdog_fn_prefix = "/dev/shm/wd_"; // + <pid> const std::string watchdog_fn_prefix = "/dev/shm/wd_"; // + <pid>
bool watchdog_kick() { bool watchdog_kick() {
std::string fn = watchdog_fn_prefix + std::to_string(getpid()); static std::string fn = watchdog_fn_prefix + std::to_string(getpid());
std::string cur_t = std::to_string(nanos_since_boot());
int r = util::write_file(fn.c_str(), cur_t.data(), cur_t.length(), O_WRONLY | O_CREAT); uint64_t ts = nanos_since_boot();
return r == 0; return util::write_file(fn.c_str(), &ts, sizeof(ts), O_WRONLY | O_CREAT) > 0;
} }

@ -1,6 +1,7 @@
import importlib import importlib
import os import os
import signal import signal
import struct
import time import time
import subprocess import subprocess
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
@ -88,7 +89,7 @@ class ManagerProcess(ABC):
try: try:
fn = WATCHDOG_FN + str(self.proc.pid) fn = WATCHDOG_FN + str(self.proc.pid)
self.last_watchdog_time = int(open(fn).read()) self.last_watchdog_time = struct.unpack('Q', open(fn, "rb").read())[0]
except Exception: except Exception:
pass pass

@ -245,7 +245,9 @@ void QUIState::update() {
emit offroadTransition(!ui_state.scene.started); emit offroadTransition(!ui_state.scene.started);
} }
watchdog_kick(); if (ui_state.sm->frame % UI_FREQ == 0) {
watchdog_kick();
}
emit uiUpdate(ui_state); emit uiUpdate(ui_state);
} }

Loading…
Cancel
Save