Also, print out the offending message format. This will hopefully help developers track down unsafe logging.
Signed-off-by: Chase Douglas <[email protected]> --- os/log.c | 26 ++++++++++++++++++++++++++ 1 files changed, 26 insertions(+), 0 deletions(-) diff --git a/os/log.c b/os/log.c index 3747fe0..36e678e 100644 --- a/os/log.c +++ b/os/log.c @@ -352,6 +352,16 @@ LogVWrite(int verb, const char *f, va_list args) int len = 0; static Bool newline = TRUE; + if (inSignalContext) { + BUG_WARN_MSG(inSignalContext, + "Warning: attempting to log data in a signal unsafe " + "manner while in signal context. Please update to check " + "inSignalContext and/or use LogMessageVerbSigSafe() or " + "ErrorSigSafe(). The offending log format message is: " + "%s\n", f); + return; + } + if (newline) { sprintf(tmpBuffer, "[%10.3f] ", GetTimeInMillis() / 1000.0); len = strlen(tmpBuffer); @@ -578,6 +588,22 @@ LogVHdrMessageVerb(MessageType type, int verb, const char *msg_format, char *p; int left; + if (inSignalContext) { + static const char warning[] = "Warning: attempting to log data in a " + "signal unsafe manner while in signal " + "context. Please update to check " + "inSignalContext and/or use " + "LogMessageVerbSigSafe(). The offending " + "header and log message formats are:\n"; + + write(logFileFd, warning, sizeof(warning) - 1); + + write(logFileFd, hdr_format, strlen_sigsafe(hdr_format)); + write(logFileFd, msg_format, strlen_sigsafe(msg_format)); + + return; + } + type_str = LogMessageTypeVerbString(type, verb); if (!type_str) return; -- 1.7.9.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
