watchdog_kick: non-allocating (#22892)

* non-allocating

* unpack

* call kick every second

* cleanup include
pull/21968/head
Dean Lee 2021-11-17 19:02:31 +08:00 committed by GitHub
parent 0dcb089254
commit ca88a8769b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 12 deletions

View File

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

View File

@ -1,6 +1,7 @@
import importlib
import os
import signal
import struct
import time
import subprocess
from abc import ABC, abstractmethod
@ -88,7 +89,7 @@ class ManagerProcess(ABC):
try:
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:
pass

View File

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