From 7299a2f2d86fd483ac3f2c7eafc2d7fcde2118a6 Mon Sep 17 00:00:00 2001 From: sthen <> Date: Tue, 20 Feb 2018 10:12:14 +0000 Subject: [PATCH] Call "vmctl stop" on each VM at shutdown, for OpenBSD guests this means they are signalled to shutdown cleanly. Wait for each to finish to avoid too much busy work at once; this may need revising if it turns out to be too slow with a larger number of VMs (e.g. signal/delay/signal/delay/... then wait for shutdowns), but let's avoid making it more complex unless we know it's needed. Based on a diff from abieber@, discussed with mlarkin@ aja@ rpe@, ok rpe --- src/etc/rc.d/vmd | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/etc/rc.d/vmd b/src/etc/rc.d/vmd index 43d04316..f023ff34 100644 --- a/src/etc/rc.d/vmd +++ b/src/etc/rc.d/vmd @@ -1,6 +1,6 @@ #!/bin/ksh # -# $OpenBSD: vmd,v 1.6 2018/01/11 22:44:44 rpe Exp $ +# $OpenBSD: vmd,v 1.7 2018/02/20 10:12:14 sthen Exp $ daemon="/usr/sbin/vmd" @@ -11,4 +11,19 @@ rc_pre() { ${daemon} -n ${daemon_flags} } +list_running() { + vmctl status | awk '$2 ~ "[0-9]" {print $8}' +} + +rc_stop() { + for vm in $(list_running); do + _rc_do vmctl stop "$vm" + while list_running | fgrep -wq "$vm"; do + sleep .1 + done + done + + pkill -T "${daemon_rtable}" -xf "${pexp}" +} + rc_cmd $1