* Rainer Jung wrote: > On 27.03.2013 22:57, jaillet...@apache.org wrote: > > Author: jailletc36 > > Date: Wed Mar 27 21:57:44 2013 > > New Revision: 1461869 > > > > URL: http://svn.apache.org/r1461869 > > Log: > > Be more clever when allocating memory for log item to be escaped. > > This should save about 70-100 bytes in the request pool with the > > default config. > > > > Modified: > > httpd/httpd/trunk/server/util.c > > > > Modified: httpd/httpd/trunk/server/util.c > > URL: > > http://svn.apache.org/viewvc/httpd/httpd/trunk/server/util.c?rev=146186 > >9&r1=1461868&r2=1461869&view=diff > > ======================================================================= > >======= --- httpd/httpd/trunk/server/util.c (original) > > +++ httpd/httpd/trunk/server/util.c Wed Mar 27 21:57:44 2013 > > @@ -1850,12 +1850,26 @@ AP_DECLARE(char *) ap_escape_logitem(apr > > char *ret; > > unsigned char *d; > > const unsigned char *s; > > + int length = 0; > > > > if (!str) { > > return NULL; > > } > > > > - ret = apr_palloc(p, 4 * strlen(str) + 1); /* Be safe */ > > + /* First, compute the space needed for the escaped string. > > + * This could be tweaked a bit for '\b', '\n'... These characters > > + * should not be common, so do not bother. */ > > + s = (const unsigned char *)str; > > + for (; *s; ++s) { > > + if (TEST_CHAR(*s, T_ESCAPE_LOGITEM)) { > > + length += 4; /* for '\\' + c2x() */ > > + } > > + else { > > + length++; > > + } > > + } > > + > > + ret = apr_palloc(p, length + 1); > > d = (unsigned char *)ret; > > Here we treat CPU against memory. AFAIK this function is in the hot code > path, because it is used for many of the fields used in the default > access log format and also in many custom ones. All other uses seem to > be either trace log messages, some (few) error log messages and > mod_status output. For those cases I think neither the CPU nor the > Memory differences are important. > > In the access log case it seems the typical fields which are run through > ap_escape_logitem() should rarely contain characters to escape. So an > alternative strategy would be to simply copy the string if we don't find > a character to escape. The second check for each char is not necessary > then. > > A quick draft patch is at > > http://people.apache.org/~rjung/patches/ap_escape_logitem_enhanced.patch
+ ret = apr_palloc(p, length + 3 * escapes); It should be still 4 * escapes ('\xHH'). nd -- Das, was ich nicht kenne, spielt stückzahlmäßig *keine* Rolle. -- Helmut Schellong in dclc