mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-09-08 03:03:43 +08:00
7cf55c3b7a
The destructor built its cleanup commands as "rm %s -rf", with the flags after the operand. GNU rm permutes arguments so this works on device and in CI, but BSD rm on macOS stops option parsing at the first operand and treats "-rf" as a second filename: $ mkdir -p /tmp/rmtest/sub && rm /tmp/rmtest -rf rm: /tmp/rmtest: is a directory rm: -rf: No such file or directory exit=1 So nothing is removed, and each of the four calls prints two errors plus "system command failed (256)" from check_system. Every run of a tool that owns an OpenpilotPrefix (replay, cabana) leaks its params dir, its comma_home and its /tmp/msgq_ dir; 33 of each had accumulated on my machine. Pass the flags first.
44 lines
1.2 KiB
C++
44 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <cassert>
|
|
#include <string>
|
|
|
|
#include "common/params.h"
|
|
#include "common/util.h"
|
|
#include "common/hardware/hw.h"
|
|
|
|
class OpenpilotPrefix {
|
|
public:
|
|
OpenpilotPrefix(std::string prefix = {}) {
|
|
if (prefix.empty()) {
|
|
prefix = util::random_string(15);
|
|
}
|
|
#ifdef __APPLE__
|
|
msgq_path = "/tmp/msgq_" + prefix;
|
|
#else
|
|
msgq_path = "/dev/shm/msgq_" + prefix;
|
|
#endif
|
|
bool ret = util::create_directories(msgq_path, 0777);
|
|
assert(ret);
|
|
setenv("OPENPILOT_PREFIX", prefix.c_str(), 1);
|
|
}
|
|
|
|
~OpenpilotPrefix() {
|
|
auto param_path = Params().getParamPath();
|
|
if (util::file_exists(param_path)) {
|
|
std::string real_path = util::readlink(param_path);
|
|
util::check_system(util::string_format("rm -rf %s", real_path.c_str()));
|
|
unlink(param_path.c_str());
|
|
}
|
|
if (getenv("COMMA_CACHE") == nullptr) {
|
|
util::check_system(util::string_format("rm -rf %s", Path::download_cache_root().c_str()));
|
|
}
|
|
util::check_system(util::string_format("rm -rf %s", Path::comma_home().c_str()));
|
|
util::check_system(util::string_format("rm -rf %s", msgq_path.c_str()));
|
|
unsetenv("OPENPILOT_PREFIX");
|
|
}
|
|
|
|
private:
|
|
std::string msgq_path;
|
|
};
|