summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Tokarev <mjt@tls.msk.ru>2014-10-30 17:40:48 +0300
committerMichael Tokarev <mjt@tls.msk.ru>2014-11-02 10:04:34 +0300
commitfee78fd6d2f8dfdfd447a33c34323dd5bd3193a2 (patch)
tree612837d9d5e1c36af4a6fbbe3a007c4ca17ff50b
parentccea25f1c7cd3f0b12d878a5294620f5478729f8 (diff)
downloadqemu-fee78fd6d2f8dfdfd447a33c34323dd5bd3193a2.tar.gz
pidfile: stop making pidfile error a special case
In case of -daemonize, we write non-zero to the daemon pipe only if pidfile creation failed, so the parent will report error about pidfile problem. There's no need to make special case for this, since all other errors are reported by the child just fine. Let the parent report error and simplify logic in os_daemonize(). This way, we don't need os_pidfile_error() function, since it only prints error now, so put the error reporting printf into the only place where qemu_create_pidfile() is called, in vl.c. While at it, fix wrong indentation in os_daemonize(). Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
-rw-r--r--include/qemu-common.h1
-rw-r--r--os-posix.c31
-rw-r--r--os-win32.c5
-rw-r--r--vl.c2
4 files changed, 9 insertions, 30 deletions
diff --git a/include/qemu-common.h b/include/qemu-common.h
index b87e9c2d8b..f8622141a8 100644
--- a/include/qemu-common.h
+++ b/include/qemu-common.h
@@ -357,7 +357,6 @@ char *qemu_find_file(int type, const char *name);
void os_setup_early_signal_handling(void);
char *os_find_datadir(void);
void os_parse_cmd_args(int index, const char *optarg);
-void os_pidfile_error(void);
/* Convert a byte between binary and BCD. */
static inline uint8_t to_bcd(uint8_t val)
diff --git a/os-posix.c b/os-posix.c
index eada8d4685..52e989797d 100644
--- a/os-posix.c
+++ b/os-posix.c
@@ -221,18 +221,14 @@ void os_daemonize(void)
do {
len = read(fds[0], &status, 1);
} while (len < 0 && errno == EINTR);
- if (len != 1) {
- exit(1);
- }
- else if (status == 1) {
- fprintf(stderr, "Could not acquire pidfile\n");
- exit(1);
- } else {
- exit(0);
- }
- } else if (pid < 0) {
- exit(1);
- }
+
+ /* only exit successfully if our child actually wrote
+ * a one-byte zero to our pipe, upon successful init */
+ exit(len == 1 && status == 0 ? 0 : 1);
+
+ } else if (pid < 0) {
+ exit(1);
+ }
close(fds[0]);
daemon_pipe = fds[1];
@@ -290,17 +286,6 @@ void os_setup_post(void)
}
}
-void os_pidfile_error(void)
-{
- if (daemonize) {
- uint8_t status = 1;
- if (write(daemon_pipe, &status, 1) != 1) {
- perror("daemonize. Writing to pipe\n");
- }
- } else
- fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno));
-}
-
void os_set_line_buffering(void)
{
setvbuf(stdout, NULL, _IOLBF, 0);
diff --git a/os-win32.c b/os-win32.c
index 5f95caac15..c0daf8e189 100644
--- a/os-win32.c
+++ b/os-win32.c
@@ -104,11 +104,6 @@ void os_parse_cmd_args(int index, const char *optarg)
return;
}
-void os_pidfile_error(void)
-{
- fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno));
-}
-
int qemu_create_pidfile(const char *filename)
{
char buffer[128];
diff --git a/vl.c b/vl.c
index f6b3546942..150524c718 100644
--- a/vl.c
+++ b/vl.c
@@ -3999,7 +3999,7 @@ int main(int argc, char **argv, char **envp)
#endif
if (pid_file && qemu_create_pidfile(pid_file) != 0) {
- os_pidfile_error();
+ fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno));
exit(1);
}