watchdog_kick: non-allocating (#22892)
* non-allocating * unpack * call kick every second * cleanup includepull/21968/head
parent
0dcb089254
commit
ca88a8769b
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue