diff mbox

vl.c: move pidfile creation up

Message ID 1477728462-16774-1-git-send-email-mjt@msgid.tls.msk.ru
State New
Headers show

Commit Message

Michael Tokarev Oct. 29, 2016, 8:07 a.m. UTC
With current code, pid file is open after various
sockets, chardevs, fsdevs and the like.  This causes
interesting effects, for example when monitor is a
unix-socket, and another qemu instance is already
running, new qemu first "damages" the socket and
next complain that it can't acquire the pid file and
exits, making running qemu unreachable.

Move pid file creation a bit earlier.

Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
 vl.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Markus Armbruster Nov. 2, 2016, 9:39 a.m. UTC | #1
Michael Tokarev <mjt@tls.msk.ru> writes:

> With current code, pid file is open after various
> sockets, chardevs, fsdevs and the like.  This causes
> interesting effects, for example when monitor is a
> unix-socket, and another qemu instance is already
> running, new qemu first "damages" the socket and
> next complain that it can't acquire the pid file and
> exits, making running qemu unreachable.
>
> Move pid file creation a bit earlier.

Makes sense, but ...

> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> ---
>  vl.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index 55763f7..7989f75 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4305,6 +4305,11 @@ int main(int argc, char **argv, char **envp)
>          exit(1);
>      }
>  
> +    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
> +        error_report("could not acquire pid file: %s", strerror(errno));
> +        exit(1);
> +    }
> +
>      page_size_init();
>      socket_init();
>  

... is this early enough?  For instance, we clobber the log file another
200 lines further up.

A "don't clobber anything externally visible before this spot" comment
could be useful.

> @@ -4326,11 +4331,6 @@ int main(int argc, char **argv, char **envp)
>      }
>  #endif
>  
> -    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
> -        error_report("could not acquire pid file: %s", strerror(errno));
> -        exit(1);
> -    }
> -
>      if (qemu_opts_foreach(qemu_find_opts("device"),
>                            device_help_func, NULL, NULL)) {
>          exit(0);
Michael Tokarev Nov. 2, 2016, 2:20 p.m. UTC | #2
02.11.2016 12:39, Markus Armbruster wrote:
> Michael Tokarev <mjt@tls.msk.ru> writes:
> 
>> With current code, pid file is open after various
>> sockets, chardevs, fsdevs and the like.  This causes
>> interesting effects, for example when monitor is a
>> unix-socket, and another qemu instance is already
>> running, new qemu first "damages" the socket and
>> next complain that it can't acquire the pid file and
>> exits, making running qemu unreachable.
..
> ... is this early enough?  For instance, we clobber the log file another
> 200 lines further up.

Yeah, you're right.  There's also some tracing initing in
there and other potentially interesting stuff.

I moved the pid file creation right after the os_daemonize()
call.  Before this point we don't even know our pid.

> A "don't clobber anything externally visible before this spot" comment
> could be useful.

Hopefully this is "early enough" to not need this comment :)

Thanks,

/mjt
diff mbox

Patch

diff --git a/vl.c b/vl.c
index 55763f7..7989f75 100644
--- a/vl.c
+++ b/vl.c
@@ -4305,6 +4305,11 @@  int main(int argc, char **argv, char **envp)
         exit(1);
     }
 
+    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
+        error_report("could not acquire pid file: %s", strerror(errno));
+        exit(1);
+    }
+
     page_size_init();
     socket_init();
 
@@ -4326,11 +4331,6 @@  int main(int argc, char **argv, char **envp)
     }
 #endif
 
-    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
-        error_report("could not acquire pid file: %s", strerror(errno));
-        exit(1);
-    }
-
     if (qemu_opts_foreach(qemu_find_opts("device"),
                           device_help_func, NULL, NULL)) {
         exit(0);