This buffering was introduced during the Paleozoic:
9fa3e853531.
There has never been an explanation as to why we may not allow
glibc to allocate the file buffer itself. We certainly have
many other uses of mmap and malloc during user-only startup,
so presumably whatever the issue was, it has been fixed during
the preceeding 18 years.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <
20220417183019.755276-2-richard.henderson@linaro.org>
- qemu_log_needs_buffers();
qemu_set_log_filename(log_file, &error_fatal);
if (log_mask) {
int mask;
qemu_set_log_filename(log_file, &error_fatal);
if (log_mask) {
int mask;
extern const QEMULogItem qemu_log_items[];
void qemu_set_log(int log_flags);
extern const QEMULogItem qemu_log_items[];
void qemu_set_log(int log_flags);
-void qemu_log_needs_buffers(void);
void qemu_set_log_filename(const char *filename, Error **errp);
void qemu_set_dfilter_ranges(const char *ranges, Error **errp);
bool qemu_log_in_addr_range(uint64_t addr);
void qemu_set_log_filename(const char *filename, Error **errp);
void qemu_set_dfilter_ranges(const char *ranges, Error **errp);
bool qemu_log_in_addr_range(uint64_t addr);
log_mask = last_log_mask | (enable_strace ? LOG_STRACE : 0);
if (log_mask) {
log_mask = last_log_mask | (enable_strace ? LOG_STRACE : 0);
if (log_mask) {
- qemu_log_needs_buffers();
qemu_set_log(log_mask);
}
qemu_set_log(log_mask);
}
-static bool log_uses_own_buffers;
-
/* enable or disable low levels log */
void qemu_set_log(int log_flags)
{
/* enable or disable low levels log */
void qemu_set_log(int log_flags)
{
assert(!is_daemonized());
logfile->fd = stderr;
}
assert(!is_daemonized());
logfile->fd = stderr;
}
- /* must avoid mmap() usage of glibc by setting a buffer "by hand" */
- if (log_uses_own_buffers) {
- static char logfile_buf[4096];
- setvbuf(logfile->fd, logfile_buf, _IOLBF, sizeof(logfile_buf));
- } else {
- /* Win32 doesn't support line-buffering, so use unbuffered output. */
- setvbuf(logfile->fd, NULL, _IONBF, 0);
+ /* Win32 doesn't support line-buffering, so use unbuffered output. */
+ setvbuf(logfile->fd, NULL, _IONBF, 0);
- setvbuf(logfile->fd, NULL, _IOLBF, 0);
+ setvbuf(logfile->fd, NULL, _IOLBF, 0);
qatomic_rcu_set(&qemu_logfile, logfile);
}
}
qatomic_rcu_set(&qemu_logfile, logfile);
}
}
-void qemu_log_needs_buffers(void)
-{
- log_uses_own_buffers = true;
-}
-
/*
* Allow the user to include %d in their logfile which will be
* substituted with the current PID. This is useful for debugging many
/*
* Allow the user to include %d in their logfile which will be
* substituted with the current PID. This is useful for debugging many