bhyve/snapshot: split up mutex/cond initialization from socket creation
Move initialization of the mutex/condition variables required by the save/restore feature to their own function. The unix domain socket that facilitates communication between bhyvectl and bhyve doesn't rely on these variables in order to be functional. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D30281
This commit is contained in:
parent
80e645dcdb
commit
fdbc86cf79
@ -1540,6 +1540,9 @@ main(int argc, char *argv[])
|
||||
if (restore_file != NULL)
|
||||
destroy_restore_state(&rstate);
|
||||
|
||||
/* initialize mutex/cond variables */
|
||||
init_snapshot();
|
||||
|
||||
/*
|
||||
* checkpointing thread for communication with bhyvectl
|
||||
*/
|
||||
|
@ -1493,6 +1493,22 @@ checkpoint_thread(void *param)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
void
|
||||
init_snapshot(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = pthread_mutex_init(&vcpu_lock, NULL);
|
||||
if (err != 0)
|
||||
errc(1, err, "checkpoint mutex init");
|
||||
err = pthread_cond_init(&vcpus_idle, NULL);
|
||||
if (err != 0)
|
||||
errc(1, err, "checkpoint cv init (vcpus_idle)");
|
||||
err = pthread_cond_init(&vcpus_can_run, NULL);
|
||||
if (err != 0)
|
||||
errc(1, err, "checkpoint cv init (vcpus_can_run)");
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the listening socket for IPC with bhyvectl
|
||||
*/
|
||||
@ -1508,15 +1524,6 @@ init_checkpoint_thread(struct vmctx *ctx)
|
||||
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
|
||||
err = pthread_mutex_init(&vcpu_lock, NULL);
|
||||
if (err != 0)
|
||||
errc(1, err, "checkpoint mutex init");
|
||||
err = pthread_cond_init(&vcpus_idle, NULL);
|
||||
if (err == 0)
|
||||
err = pthread_cond_init(&vcpus_can_run, NULL);
|
||||
if (err != 0)
|
||||
errc(1, err, "checkpoint cv init");
|
||||
|
||||
socket_fd = socket(PF_UNIX, SOCK_DGRAM, 0);
|
||||
if (socket_fd < 0) {
|
||||
EPRINTLN("Socket creation failed: %s", strerror(errno));
|
||||
|
@ -127,6 +127,7 @@ int vm_resume_user_devs(struct vmctx *ctx);
|
||||
int get_checkpoint_msg(int conn_fd, struct vmctx *ctx);
|
||||
void *checkpoint_thread(void *param);
|
||||
int init_checkpoint_thread(struct vmctx *ctx);
|
||||
void init_snapshot(void);
|
||||
|
||||
int load_restore_file(const char *filename, struct restore_state *rstate);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user