Message ID | 1477728462-16774-1-git-send-email-mjt@msgid.tls.msk.ru |
---|---|
State | New |
Headers | show |
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);
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 --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);
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(-)