util/log: Pass Error pointer to qemu_set_log

Do not force exit within qemu_set_log; return bool and pass
an Error value back up the stack as per usual.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220417183019.755276-5-richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-04-17 11:29:44 -07:00
parent e2c7c6a454
commit c5955f4ff4
12 changed files with 22 additions and 18 deletions

View file

@ -414,7 +414,7 @@ int main(int argc, char **argv)
qemu_print_log_usage(stdout); qemu_print_log_usage(stdout);
exit(1); exit(1);
} }
qemu_set_log(mask); qemu_set_log(mask, &error_fatal);
} }
if (optind >= argc) { if (optind >= argc) {

View file

@ -147,7 +147,7 @@ typedef struct QEMULogItem {
extern const QEMULogItem qemu_log_items[]; extern const QEMULogItem qemu_log_items[];
void qemu_set_log(int log_flags); bool qemu_set_log(int log_flags, Error **errp);
bool qemu_set_log_filename(const char *filename, Error **errp); bool qemu_set_log_filename(const char *filename, Error **errp);
void qemu_set_dfilter_ranges(const char *ranges, Error **errp); void qemu_set_dfilter_ranges(const char *ranges, Error **errp);
bool qemu_log_in_addr_range(uint64_t addr); bool qemu_log_in_addr_range(uint64_t addr);

View file

@ -679,7 +679,7 @@ int main(int argc, char **argv, char **envp)
log_mask = last_log_mask | (enable_strace ? LOG_STRACE : 0); log_mask = last_log_mask | (enable_strace ? LOG_STRACE : 0);
if (log_mask) { if (log_mask) {
qemu_set_log(log_mask); qemu_set_log(log_mask, &error_fatal);
} }
if (!trace_init_backends()) { if (!trace_init_backends()) {

View file

@ -428,6 +428,7 @@ static void hmp_log(Monitor *mon, const QDict *qdict)
{ {
int mask; int mask;
const char *items = qdict_get_str(qdict, "items"); const char *items = qdict_get_str(qdict, "items");
Error *err = NULL;
if (!strcmp(items, "none")) { if (!strcmp(items, "none")) {
mask = 0; mask = 0;
@ -438,7 +439,10 @@ static void hmp_log(Monitor *mon, const QDict *qdict)
return; return;
} }
} }
qemu_set_log(mask);
if (!qemu_set_log(mask, &err)) {
error_report_err(err);
}
} }
static void hmp_singlestep(Monitor *mon, const QDict *qdict) static void hmp_singlestep(Monitor *mon, const QDict *qdict)

View file

@ -5443,7 +5443,7 @@ int main(int argc, char **argv)
exit(1); exit(1);
} }
trace_init_file(); trace_init_file();
qemu_set_log(LOG_TRACE); qemu_set_log(LOG_TRACE, &error_fatal);
/* find the command */ /* find the command */
for (cmd = img_cmds; cmd->name != NULL; cmd++) { for (cmd = img_cmds; cmd->name != NULL; cmd++) {

View file

@ -634,7 +634,7 @@ int main(int argc, char **argv)
exit(1); exit(1);
} }
trace_init_file(); trace_init_file();
qemu_set_log(LOG_TRACE); qemu_set_log(LOG_TRACE, &error_fatal);
/* initialize commands */ /* initialize commands */
qemuio_add_command(&quit_cmd); qemuio_add_command(&quit_cmd);

View file

@ -804,7 +804,7 @@ int main(int argc, char **argv)
exit(1); exit(1);
} }
trace_init_file(); trace_init_file();
qemu_set_log(LOG_TRACE); qemu_set_log(LOG_TRACE, &error_fatal);
socket_activation = check_socket_activation(); socket_activation = check_socket_activation();
if (socket_activation == 0) { if (socket_activation == 0) {

View file

@ -1001,7 +1001,7 @@ int main(int argc, char **argv)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
trace_init_file(); trace_init_file();
qemu_set_log(LOG_TRACE); qemu_set_log(LOG_TRACE, &error_fatal);
#ifdef CONFIG_MPATH #ifdef CONFIG_MPATH
dm_init(); dm_init();

View file

@ -2570,9 +2570,9 @@ static void qemu_process_early_options(void)
qemu_print_log_usage(stdout); qemu_print_log_usage(stdout);
exit(1); exit(1);
} }
qemu_set_log(mask); qemu_set_log(mask, &error_fatal);
} else { } else {
qemu_set_log(0); qemu_set_log(0, &error_fatal);
} }
qemu_add_default_firmwarepath(); qemu_add_default_firmwarepath();

View file

@ -392,7 +392,7 @@ int main(int argc, char *argv[])
if (!trace_init_backends()) { if (!trace_init_backends()) {
return EXIT_FAILURE; return EXIT_FAILURE;
} }
qemu_set_log(LOG_TRACE); qemu_set_log(LOG_TRACE, &error_fatal);
qemu_init_main_loop(&error_fatal); qemu_init_main_loop(&error_fatal);
process_options(argc, argv, false); process_options(argc, argv, false);

View file

@ -122,7 +122,7 @@ static void test_logfile_write(gconstpointer data)
* In cases where a logging backend other than log is used, * In cases where a logging backend other than log is used,
* this is needed. * this is needed.
*/ */
qemu_set_log(CPU_LOG_TB_OUT_ASM); qemu_set_log(CPU_LOG_TB_OUT_ASM, &error_abort);
file_path = g_build_filename(dir, "qemu_test_log_write0.log", NULL); file_path = g_build_filename(dir, "qemu_test_log_write0.log", NULL);
file_path1 = g_build_filename(dir, "qemu_test_log_write1.log", NULL); file_path1 = g_build_filename(dir, "qemu_test_log_write1.log", NULL);

View file

@ -73,7 +73,7 @@ static void qemu_logfile_free(QemuLogFile *logfile)
} }
/* enable or disable low levels log */ /* enable or disable low levels log */
void qemu_set_log(int log_flags) bool qemu_set_log(int log_flags, Error **errp)
{ {
bool need_to_open_file = false; bool need_to_open_file = false;
QemuLogFile *logfile; QemuLogFile *logfile;
@ -103,9 +103,9 @@ void qemu_set_log(int log_flags)
if (logfilename) { if (logfilename) {
logfile->fd = fopen(logfilename, log_append ? "a" : "w"); logfile->fd = fopen(logfilename, log_append ? "a" : "w");
if (!logfile->fd) { if (!logfile->fd) {
g_free(logfile); error_setg_errno(errp, errno, "Error opening logfile %s",
perror(logfilename); logfilename);
_exit(1); return false;
} }
/* In case we are a daemon redirect stderr to logfile */ /* In case we are a daemon redirect stderr to logfile */
if (is_daemonized()) { if (is_daemonized()) {
@ -129,6 +129,7 @@ void qemu_set_log(int log_flags)
log_append = 1; log_append = 1;
qatomic_rcu_set(&qemu_logfile, logfile); qatomic_rcu_set(&qemu_logfile, logfile);
} }
return true;
} }
/* /*
@ -159,8 +160,7 @@ bool qemu_set_log_filename(const char *filename, Error **errp)
} }
qemu_log_close(); qemu_log_close();
qemu_set_log(qemu_loglevel); return qemu_set_log(qemu_loglevel, errp);
return true;
} }
/* Returns true if addr is in our debug filter or no filter defined /* Returns true if addr is in our debug filter or no filter defined