[PATCH] os: don't malloc memory in LogVMessageVerb.
Alan Coopersmith
Alan.Coopersmith at Sun.COM
Thu Apr 16 19:25:28 PDT 2009
Looks good to me.
Acked-by: Alan Coopersmith <alan.coopersmith at sun.com>
-alan-
Peter Hutterer wrote:
> LogVWrite is limited to a buffer size of 1024, so we don't loose anything here
> by truncating. This way we can use LogVMessageVerb (and xf86Msg and friends)
> during signal handlers with the normal message types.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>
> Currently, doing an xf86Msg() during a signal handler is a big no-no, it
> deadlocks the system on malloc when the prefix is prepended. Only X_NONE
> messages bypass this.
> There isn't really a need to malloc though, we're limited to 1024 bytes anyway
> in LogVWrite.
>
> os/log.c | 22 ++++++----------------
> 1 files changed, 6 insertions(+), 16 deletions(-)
>
> diff --git a/os/log.c b/os/log.c
> index 3961b0b..8108890 100644
> --- a/os/log.c
> +++ b/os/log.c
> @@ -316,7 +316,7 @@ void
> LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
> {
> const char *s = X_UNKNOWN_STRING;
> - char *tmpBuf = NULL;
> + char tmpBuf[1024];
>
> /* Ignore verbosity for X_ERROR */
> if (logVerbosity >= verb || logFileVerbosity >= verb || type == X_ERROR) {
> @@ -358,21 +358,11 @@ LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
> break;
> }
>
> - /*
> - * Prefix the format string with the message type. We do it this way
> - * so that LogVWrite() is only called once per message.
> - */
> - if (s) {
> - tmpBuf = malloc(strlen(format) + strlen(s) + 1 + 1);
> - /* Silently return if malloc fails here. */
> - if (!tmpBuf)
> - return;
> - sprintf(tmpBuf, "%s ", s);
> - strcat(tmpBuf, format);
> - LogVWrite(verb, tmpBuf, args);
> - free(tmpBuf);
> - } else
> - LogVWrite(verb, format, args);
> + /* if s is not NULL we need a space before format */
> + snprintf(tmpBuf, sizeof(tmpBuf), "%s%s%s", s ? s : "",
> + s ? " " : "",
> + format);
> + LogVWrite(verb, tmpBuf, args);
> }
> }
>
--
-Alan Coopersmith- alan.coopersmith at sun.com
Sun Microsystems, Inc. - X Window System Engineering
More information about the xorg-devel
mailing list