From 692fc118554d39128b5a12a8705c66e2e8a6a7dc Mon Sep 17 00:00:00 2001 Message-Id: <692fc118554d39128b5a12a8705c66e2e8a6a7dc.1367947969.git.minovotn@redhat.com> In-Reply-To: <707b9b97153063374d2530e72c49b1499fc21af9.1367947969.git.minovotn@redhat.com> References: <707b9b97153063374d2530e72c49b1499fc21af9.1367947969.git.minovotn@redhat.com> From: Michal Novotny Date: Tue, 7 May 2013 18:37:46 +0200 Subject: [PATCH 038/114] Revert "qemu-ga: bios_supports_mode(): improve error reporting" This reverts commit dd731ad4aec8012d999bf1ccc5761422b0bd3819. Reverting as asked by Laszlo in message <51892739.2030807@redhat.com> because of the ordering issue (most likely) related to supersed testing. Signed-off-by: Michal Novotny --- qga/commands-posix.c | 46 +++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 3ffd64f..70283ac 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -615,9 +615,8 @@ error: static void bios_supports_mode(const char *pmutils_bin, const char *pmutils_arg, const char *sysfile_str, Error **err) { - Error *local_err = NULL; char *pmutils_path; - pid_t pid; + pid_t pid, rpid; int status; pmutils_path = g_find_program_in_path(pmutils_bin); @@ -662,38 +661,31 @@ static void bios_supports_mode(const char *pmutils_bin, const char *pmutils_arg, } _exit(SUSPEND_NOT_SUPPORTED); - } else if (pid < 0) { - error_setg_errno(err, errno, "failed to create child process"); - goto out; } - ga_wait_child(pid, &status, &local_err); - if (error_is_set(&local_err)) { - error_propagate(err, local_err); - goto out; - } + g_free(pmutils_path); - if (!WIFEXITED(status)) { - error_setg(err, "child process has terminated abnormally"); - goto out; + if (pid < 0) { + goto undef_err; } - switch (WEXITSTATUS(status)) { - case SUSPEND_SUPPORTED: - goto out; - case SUSPEND_NOT_SUPPORTED: - error_setg(err, - "the requested suspend mode is not supported by the guest"); - goto out; - default: - error_setg(err, - "the helper program '%s' returned an unexpected exit status" - " code (%d)", pmutils_path, WEXITSTATUS(status)); - goto out; + do { + rpid = waitpid(pid, &status, 0); + } while (rpid == -1 && errno == EINTR); + if (rpid == pid && WIFEXITED(status)) { + switch (WEXITSTATUS(status)) { + case SUSPEND_SUPPORTED: + return; + case SUSPEND_NOT_SUPPORTED: + error_set(err, QERR_UNSUPPORTED); + return; + default: + goto undef_err; + } } -out: - g_free(pmutils_path); +undef_err: + error_set(err, QERR_UNDEFINED_ERROR); } static void guest_suspend(const char *pmutils_bin, const char *sysfile_str, -- 1.7.11.7