On Mon, Apr 16, 2012 at 11:30:22AM -0700, Chase Douglas wrote:
> On 04/16/2012 11:14 AM, Chase Douglas wrote:
> > 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;
> > +    }
> > +
> 
> I forgot to fix up this second hunk. I have pushed a fixed version to my
> branch at fdo. It basically does the same thing as the first hunk.

how about a define for the message? I don't think the header is that
important, the log message alone should be enough to identify (or print a
backtrace here)
 
Reviewed-by: Peter Hutterer <[email protected]> otherwise

Cheers,
  Peter
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to