Fix exit code handling for FUSE2 drivers

This commit is contained in:
Marcus Holland-Moritz 2023-07-03 20:55:03 +02:00
parent 6056aa87c8
commit 46eb5bae5a

View File

@ -458,23 +458,23 @@ class driver_runner {
if (!mountpoint_.empty()) { if (!mountpoint_.empty()) {
#ifndef _WIN32 #ifndef _WIN32
if (process_) { if (process_) {
#endif
#ifdef _WIN32
constexpr int expected_exit_code = 0;
#else
constexpr int expected_exit_code = SIGINT;
#endif #endif
process_->interrupt(); process_->interrupt();
process_->wait(); process_->wait();
auto ec = process_->exit_code(); auto ec = process_->exit_code();
if (ec != expected_exit_code) { bool is_expected_exit_code = ec == 0
#ifndef _WIN32
|| ec == SIGINT
#endif
;
if (!is_expected_exit_code) {
std::cerr << "driver failed to unmount:\nout:\n" std::cerr << "driver failed to unmount:\nout:\n"
<< process_->out() << "err:\n" << process_->out() << "err:\n"
<< process_->err() << "exit code: " << ec << "\n"; << process_->err() << "exit code: " << ec << "\n";
} }
process_.reset(); process_.reset();
mountpoint_.clear(); mountpoint_.clear();
return ec == expected_exit_code; return is_expected_exit_code;
#ifndef _WIN32 #ifndef _WIN32
} else { } else {
subprocess::check_run(find_fusermount(), "-u", mountpoint_); subprocess::check_run(find_fusermount(), "-u", mountpoint_);