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 "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…
Reference in New Issue