Seiji Aguchi <seiji.agu...@hds.com> writes: >> > Are gmtime() + strftime() unsuitable for some reason? >> >> They are not async-signal safe, so they are not usable in between a >> fork() and exec*(). Libvirt avoids them because it DOES log >> information including timestamps in between fork/exec (and prior to >> writing libvirt's virtime.c, we DID hit cases where libvirt would >> deadlock a child process due to the non-safe use of a more naive >> timestamp generator), but I don't know if qemu suffers from the same >> restriction of when it has anything worth logging. > > In my understanding, gmtime() + strftime() is usable in error_report() > because it seems to be called > For just a option check.
error_report() is not bound to a particular task. It simply reports either to the current monitor or to stderr. It's certainly not usuable in a signal handler, or similar signal-unsafe context. >>[TODO] >>Other functions below are used to output error messages in qemu. > >- qerror_report() is called in many source codes. > >- fprintf() is called in vl.c. > > On the other hand, qerror_report() and fprintf () seems to be called > in signal handers. fprintf() in a signal handler? Where? > So, in those cases, some signal-safe functions should be used.