Merge "Clear temporary directory on start."
diff --git a/virtualizationservice/src/aidl.rs b/virtualizationservice/src/aidl.rs
index 1f56731..3ebde6f 100644
--- a/virtualizationservice/src/aidl.rs
+++ b/virtualizationservice/src/aidl.rs
@@ -53,7 +53,7 @@
pub const BINDER_SERVICE_IDENTIFIER: &str = "android.system.virtualizationservice";
/// Directory in which to write disk image files used while running VMs.
-const TEMPORARY_DIRECTORY: &str = "/data/misc/virtualizationservice";
+pub const TEMPORARY_DIRECTORY: &str = "/data/misc/virtualizationservice";
/// The list of APEXes which microdroid requires.
/// TODO(b/192200378) move this to microdroid.json?
diff --git a/virtualizationservice/src/main.rs b/virtualizationservice/src/main.rs
index 46ddd2e..c9cc029 100644
--- a/virtualizationservice/src/main.rs
+++ b/virtualizationservice/src/main.rs
@@ -20,10 +20,12 @@
mod gpt;
mod payload;
-use crate::aidl::{VirtualizationService, BINDER_SERVICE_IDENTIFIER};
+use crate::aidl::{VirtualizationService, BINDER_SERVICE_IDENTIFIER, TEMPORARY_DIRECTORY};
use android_system_virtualizationservice::aidl::android::system::virtualizationservice::IVirtualizationService::BnVirtualizationService;
use android_system_virtualizationservice::binder::{add_service, BinderFeatures, ProcessState};
+use anyhow::Error;
use log::{info, Level};
+use std::fs::{remove_dir_all, remove_file, read_dir};
/// The first CID to assign to a guest VM managed by the VirtualizationService. CIDs lower than this
/// are reserved for the host or other usage.
@@ -39,6 +41,8 @@
android_logger::Config::default().with_tag(LOG_TAG).with_min_level(Level::Trace),
);
+ clear_temporary_files().expect("Failed to delete old temporary files");
+
let service = VirtualizationService::init();
let service = BnVirtualizationService::new_binder(
service,
@@ -48,3 +52,17 @@
info!("Registered Binder service, joining threadpool.");
ProcessState::join_thread_pool();
}
+
+/// Remove any files under `TEMPORARY_DIRECTORY`.
+fn clear_temporary_files() -> Result<(), Error> {
+ for dir_entry in read_dir(TEMPORARY_DIRECTORY)? {
+ let dir_entry = dir_entry?;
+ let path = dir_entry.path();
+ if dir_entry.file_type()?.is_dir() {
+ remove_dir_all(path)?;
+ } else {
+ remove_file(path)?;
+ }
+ }
+ Ok(())
+}