Loading qga/commands-posix.c +18 −11 Original line number Diff line number Diff line Loading @@ -702,8 +702,9 @@ out: static void guest_suspend(const char *pmutils_bin, const char *sysfile_str, Error **err) { Error *local_err = NULL; char *pmutils_path; pid_t rpid, pid; pid_t pid; int status; pmutils_path = g_find_program_in_path(pmutils_bin); Loading Loading @@ -741,23 +742,29 @@ static void guest_suspend(const char *pmutils_bin, const char *sysfile_str, } _exit(EXIT_SUCCESS); } else if (pid < 0) { error_setg_errno(err, errno, "failed to create child process"); goto out; } g_free(pmutils_path); ga_wait_child(pid, &status, &local_err); if (error_is_set(&local_err)) { error_propagate(err, local_err); goto out; } if (pid < 0) { goto exit_err; if (!WIFEXITED(status)) { error_setg(err, "child process has terminated abnormally"); goto out; } do { rpid = waitpid(pid, &status, 0); } while (rpid == -1 && errno == EINTR); if (rpid == pid && WIFEXITED(status) && !WEXITSTATUS(status)) { return; if (WEXITSTATUS(status)) { error_setg(err, "child process has failed to suspend"); goto out; } exit_err: error_set(err, QERR_UNDEFINED_ERROR); out: g_free(pmutils_path); } void qmp_guest_suspend_disk(Error **err) Loading Loading
qga/commands-posix.c +18 −11 Original line number Diff line number Diff line Loading @@ -702,8 +702,9 @@ out: static void guest_suspend(const char *pmutils_bin, const char *sysfile_str, Error **err) { Error *local_err = NULL; char *pmutils_path; pid_t rpid, pid; pid_t pid; int status; pmutils_path = g_find_program_in_path(pmutils_bin); Loading Loading @@ -741,23 +742,29 @@ static void guest_suspend(const char *pmutils_bin, const char *sysfile_str, } _exit(EXIT_SUCCESS); } else if (pid < 0) { error_setg_errno(err, errno, "failed to create child process"); goto out; } g_free(pmutils_path); ga_wait_child(pid, &status, &local_err); if (error_is_set(&local_err)) { error_propagate(err, local_err); goto out; } if (pid < 0) { goto exit_err; if (!WIFEXITED(status)) { error_setg(err, "child process has terminated abnormally"); goto out; } do { rpid = waitpid(pid, &status, 0); } while (rpid == -1 && errno == EINTR); if (rpid == pid && WIFEXITED(status) && !WEXITSTATUS(status)) { return; if (WEXITSTATUS(status)) { error_setg(err, "child process has failed to suspend"); goto out; } exit_err: error_set(err, QERR_UNDEFINED_ERROR); out: g_free(pmutils_path); } void qmp_guest_suspend_disk(Error **err) Loading