On 08/05/2018 05:54 PM, Roman Bogorodskiy wrote:
To reconnect to the bhyve process after deamon restart, a process
VM's pid points to is checked to have proctitle equal to 'bhyve: $vmname'.
However, there could be a bug in bhyve(8) which prevents it from
setting proctitle, so process arguments will look like:
['/usr/sbin/bhyve', ..., 'vmname', NULL]
Fall back to checking this format if proctitle doesn't match as a
workaround for this bug.
---
src/bhyve/bhyve_process.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c
index 9276d7d364..78d6ff1389 100644
--- a/src/bhyve/bhyve_process.c
+++ b/src/bhyve/bhyve_process.c
@@ -416,18 +416,28 @@ virBhyveProcessReconnect(virDomainObjPtr vm,
if (proc_argv && proc_argv[0]) {
if (STREQ(expected_proctitle, proc_argv[0])) {
ret = 0;
- priv->mon = bhyveMonitorOpen(vm, data->driver);
- if (vm->def->ngraphics == 1 &&
- vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
- int vnc_port = vm->def->graphics[0]->data.vnc.port;
- if (virPortAllocatorSetUsed(vnc_port) < 0) {
- VIR_WARN("Failed to mark VNC port '%d' as used by
'%s'",
- vnc_port, vm->def->name);
- }
+ } else {
+ if (STREQ(BHYVE, proc_argv[0])) {
+ int i = 0;
s/int/size_t/
+ for (; proc_argv[i+1]; i++);
Ugrh. It is very easy to miss the trailing semicolon. Please move it
onto a separate line.
+ if ((i != 0) && (STREQ(vm->def->name,
proc_argv[i])))
+ ret = 0;
}
}
}
I suggest squashing this in:
diff --git i/src/bhyve/bhyve_process.c w/src/bhyve/bhyve_process.c
index 78d6ff1389..47a5dc3f94 100644
--- i/src/bhyve/bhyve_process.c
+++ w/src/bhyve/bhyve_process.c
@@ -418,9 +418,11 @@ virBhyveProcessReconnect(virDomainObjPtr vm,
ret = 0;
} else {
if (STREQ(BHYVE, proc_argv[0])) {
- int i = 0;
- for (; proc_argv[i+1]; i++);
- if ((i != 0) && (STREQ(vm->def->name, proc_argv[i])))
+ size_t i;
+
+ for (i = 0; proc_argv[i+1]; i++)
+ ;
+ if ((STREQ(vm->def->name, proc_argv[i])))
ret = 0;
}
}
ACK
Michal