Le lancement de processus de Studio host (CoreProcess) devient sequa::platform::ChildProcess dans platform/process, pour être partagé par Studio host et le Core (qui lancera le rendu, ADR 0009). Nouvelle option kill_with_parent : l'enfant meurt avec le parent, même brutalement (job object KILL_ON_JOB_CLOSE sous Windows, fork + PR_SET_PDEATHSIG sous Linux, ignorée sous macOS). Les tests de copie fantôme restent dans studio/host/supervisor (test_shadow.cpp) avec l'enfant de test de platform/process.
41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
// SPDX-License-Identifier: MPL-2.0
|
|
// Dossier temporaire propre à un test, supprimé à la fin. Jamais le vrai dossier
|
|
// d'exécution de SEQUA.
|
|
#pragma once
|
|
|
|
#include "sequa/platform/process.hpp"
|
|
|
|
#include <filesystem>
|
|
#include <system_error>
|
|
|
|
namespace sequa::platform::testing {
|
|
|
|
class TempDir {
|
|
public:
|
|
TempDir()
|
|
: path_(std::filesystem::temp_directory_path()
|
|
/ ("sequa-process-" + std::to_string(current_process_id()) + "-"
|
|
+ std::to_string(++counter_)))
|
|
{
|
|
std::filesystem::create_directories(path_);
|
|
}
|
|
~TempDir()
|
|
{
|
|
std::error_code ignored;
|
|
std::filesystem::remove_all(path_, ignored);
|
|
}
|
|
TempDir(const TempDir&) = delete;
|
|
TempDir& operator=(const TempDir&) = delete;
|
|
|
|
[[nodiscard]] const std::filesystem::path& path() const noexcept { return path_; }
|
|
|
|
private:
|
|
// Compteur de secours : deux dossiers créés dans la même milliseconde par le
|
|
// même processus ne se chevauchent pas.
|
|
inline static int counter_ = 0;
|
|
|
|
std::filesystem::path path_;
|
|
};
|
|
|
|
} // namespace sequa::platform::testing
|