Skip to content
Snippets Groups Projects
Commit a8a9f23a authored by Rom Walton's avatar Rom Walton
Browse files

VBOX: Add option to use 'savestate' instead of 'poweroff' during graceful VM shutdown.

parent 82137253
No related branches found
No related tags found
No related merge requests found
......@@ -117,6 +117,7 @@ void VBOX_JOB::clear() {
enable_remotedesktop = false;
enable_gbac = false;
enable_graphics_support = false;
enable_vm_savestate_usage = false;
disable_automatic_checkpoints = false;
pf_guest_port = 0;
pf_host_port = 0;
......@@ -169,6 +170,7 @@ int VBOX_JOB::parse() {
else if (xp.parse_bool("enable_remotedesktop", enable_remotedesktop)) continue;
else if (xp.parse_bool("enable_gbac", enable_gbac)) continue;
else if (xp.parse_bool("enable_graphics_support", enable_graphics_support)) continue;
else if (xp.parse_bool("enable_vm_savestate_usage", enable_vm_savestate_usage)) continue;
else if (xp.parse_bool("disable_automatic_checkpoints", disable_automatic_checkpoints)) continue;
else if (xp.parse_int("pf_guest_port", pf_guest_port)) continue;
else if (xp.parse_int("pf_host_port", pf_host_port)) continue;
......
......@@ -102,6 +102,9 @@ public:
// http://boinc.berkeley.edu/trac/wiki/GraphicsApi#File
bool enable_graphics_support;
// whether to use savestate instead of poweroff on exit
bool enable_vm_savestate_usage;
// whether to disable automatic checkpoint support
bool disable_automatic_checkpoints;
......
......@@ -876,7 +876,16 @@ int main(int argc, char** argv) {
if (boinc_status.no_heartbeat || boinc_status.quit_request) {
pVM->reset_vm_process_priority();
if (pVM->enable_vm_savestate_usage) {
retval = pVM->create_snapshot(elapsed_time);
if (!retval) {
checkpoint.update(elapsed_time, current_cpu_time);
boinc_checkpoint_completed();
}
pVM->stop();
} else {
pVM->poweroff();
}
boinc_temporary_exit(86400);
}
if (boinc_status.abort_request) {
......@@ -907,7 +916,12 @@ int main(int argc, char** argv) {
}
delete_temporary_exit_trigger_file(*pVM);
pVM->reset_vm_process_priority();
pVM->stop();
retval = pVM->create_snapshot(elapsed_time);
if (!retval) {
checkpoint.update(elapsed_time, current_cpu_time);
boinc_checkpoint_completed();
}
pVM->poweroff();
if (is_notice) {
boinc_temporary_exit(temp_delay, message.c_str(), is_notice);
} else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment