Stefan Hajnoczi <stefa...@redhat.com> writes: > From: Paolo Bonzini <pbonz...@redhat.com> > > This is cleaner, and improves error reporting with -daemonize. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > Signed-off-by: Denis V. Lunev <d...@openvz.org> > Acked-by: Christian Borntraeger <borntrae...@de.ibm.com> > Message-id: 1452174932-28657-4-git-send-email-...@openvz.org > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > qemu-io.c | 2 +- > trace/control.c | 17 ++++++++++++----- > trace/control.h | 13 ++++++++++++- > trace/simple.c | 6 ++---- > trace/simple.h | 4 ++-- > vl.c | 13 +++++++++---- > 6 files changed, 38 insertions(+), 17 deletions(-) > > diff --git a/qemu-io.c b/qemu-io.c > index 1c11d57..83c48f4 100644 > --- a/qemu-io.c > +++ b/qemu-io.c > @@ -435,7 +435,7 @@ int main(int argc, char **argv) > } > break; > case 'T': > - if (!trace_init_backends(optarg)) { > + if (!trace_init_backends()) { > exit(1); /* error message will have been printed */ > } > break; > diff --git a/trace/control.c b/trace/control.c > index 931d64c..f5a497a 100644 > --- a/trace/control.c > +++ b/trace/control.c > @@ -145,17 +145,24 @@ void trace_init_events(const char *fname) > loc_pop(&loc); > } > > -bool trace_init_backends(const char *file) > +void trace_init_file(const char *file) > { > #ifdef CONFIG_TRACE_SIMPLE > - if (!st_init(file)) { > - fprintf(stderr, "failed to initialize simple tracing backend.\n"); > - return false; > - } > + st_set_trace_file(file);
This breaks "make check" as st_set_trace_file will attempt to flush the file: /* Halt trace writeout */ flush_trace_file(true); trace_writeout_enabled = false; flush_trace_file(true); And this deadlocks waiting for trace_empty_cond to get tickled which will never happen because: <snip> > diff --git a/vl.c b/vl.c > index ff2a7d5..955f364 100644 > --- a/vl.c > +++ b/vl.c > @@ -2988,7 +2988,7 @@ int main(int argc, char **argv, char **envp) > bool userconfig = true; > const char *log_mask = NULL; > const char *log_file = NULL; > - const char *trace_file = NULL; > + char *trace_file = NULL; > ram_addr_t maxram_size; > uint64_t ram_slots = 0; > FILE *vmstate_dump_file = NULL; > @@ -3905,7 +3905,10 @@ int main(int argc, char **argv, char **envp) > exit(1); > } > trace_init_events(qemu_opt_get(opts, "events")); > - trace_file = qemu_opt_get(opts, "file"); > + if (trace_file) { > + g_free(trace_file); > + } > + trace_file = g_strdup(qemu_opt_get(opts, "file")); > qemu_opts_del(opts); > break; > } > @@ -4089,6 +4092,8 @@ int main(int argc, char **argv, char **envp) > exit(0); > } > > + trace_init_file(trace_file); > + This happens before: > */ > if (log_file) { > @@ -4106,7 +4111,7 @@ int main(int argc, char **argv, char **envp) > } > > if (!is_daemonized()) { > - if (!trace_init_backends(trace_file)) { > + if (!trace_init_backends()) { > exit(1); > } > } > @@ -4653,7 +4658,7 @@ int main(int argc, char **argv, char **envp) > os_setup_post(); > > if (is_daemonized()) { > - if (!trace_init_backends(trace_file)) { > + if (!trace_init_backends()) { This which creates the thread. > exit(1); > } > } -- Alex Bennée