You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2011/05/13 22:34:34 UTC

svn commit: r1102889 - in /trafficserver/traffic/trunk: iocore/eventsystem/IOBuffer.cc iocore/hostdb/HostDB.cc iocore/net/UnixNetPages.cc lib/ts/ink_string++.cc lib/ts/ink_string++.h proxy/http/HttpTransact.h proxy/http/remap/RemapProcessor.cc

Author: zwoop
Date: Fri May 13 20:34:34 2011
New Revision: 1102889

URL: http://svn.apache.org/viewvc?rev=1102889&view=rev
Log:
TS-776 memchr in glibc has evolved, and is faster than our version, replace

Modified:
    trafficserver/traffic/trunk/iocore/eventsystem/IOBuffer.cc
    trafficserver/traffic/trunk/iocore/hostdb/HostDB.cc
    trafficserver/traffic/trunk/iocore/net/UnixNetPages.cc
    trafficserver/traffic/trunk/lib/ts/ink_string++.cc
    trafficserver/traffic/trunk/lib/ts/ink_string++.h
    trafficserver/traffic/trunk/proxy/http/HttpTransact.h
    trafficserver/traffic/trunk/proxy/http/remap/RemapProcessor.cc

Modified: trafficserver/traffic/trunk/iocore/eventsystem/IOBuffer.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/eventsystem/IOBuffer.cc?rev=1102889&r1=1102888&r2=1102889&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/eventsystem/IOBuffer.cc (original)
+++ trafficserver/traffic/trunk/iocore/eventsystem/IOBuffer.cc Fri May 13 20:34:34 2011
@@ -206,6 +206,7 @@ IOBufferReader::read(void *ab, int64_t l
   return bytes;
 }
 
+// TODO: I don't think this method is used anywhere, so perhaps get rid of it ?
 int64_t
 IOBufferReader::memchr(char c, int64_t len, int64_t offset)
 {
@@ -227,7 +228,7 @@ IOBufferReader::memchr(char c, int64_t l
     else
       bytes = len;
     char *s = b->start() + offset;
-    char *p = (char *) ink_memchr(s, c, bytes);
+    char *p = (char *) ::memchr(s, c, bytes);
     if (p)
       return (int64_t) (o - start_offset + p - s);
     o += bytes;

Modified: trafficserver/traffic/trunk/iocore/hostdb/HostDB.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/hostdb/HostDB.cc?rev=1102889&r1=1102888&r2=1102889&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/hostdb/HostDB.cc (original)
+++ trafficserver/traffic/trunk/iocore/hostdb/HostDB.cc Fri May 13 20:34:34 2011
@@ -197,10 +197,10 @@ struct HostDBTestRR: public Continuation
     while (outstanding < 40) {
       if (!nb)
         goto Lreturn;
-      char *end = (char *) ink_memchr(b, '\n', nb);
+      char *end = (char *)memchr(b, '\n', nb);
       if (!end)
         read_some();
-      end = (char *) ink_memchr(b, '\n', nb);
+      end = (char *)memchr(b, '\n', nb);
       if (!end)
         nb = 0;
       else {
@@ -2199,7 +2199,7 @@ register_ShowHostDB(Continuation * c, HT
     s->sarg = xstrndup(query, query_len);
     char *gn = NULL;
     if (s->sarg)
-      gn = (char *) ink_memchr(s->sarg, '=', strlen(s->sarg));
+      gn = (char *)memchr(s->sarg, '=', strlen(s->sarg));
     if (gn)
       s->ip = ink_inet_addr(gn + 1);
     SET_CONTINUATION_HANDLER(s, &ShowHostDB::showLookup);
@@ -2210,7 +2210,7 @@ register_ShowHostDB(Continuation * c, HT
     s->sarg = xstrndup(query, query_len);
     char *gn = NULL;
     if (s->sarg)
-      gn = (char *) ink_memchr(s->sarg, '=', strlen(s->sarg));
+      gn = (char *)memchr(s->sarg, '=', strlen(s->sarg));
     if (gn)
       s->name = gn + 1;
     SET_CONTINUATION_HANDLER(s, &ShowHostDB::showLookup);

Modified: trafficserver/traffic/trunk/iocore/net/UnixNetPages.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/UnixNetPages.cc?rev=1102889&r1=1102888&r2=1102889&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/UnixNetPages.cc (original)
+++ trafficserver/traffic/trunk/iocore/net/UnixNetPages.cc Fri May 13 20:34:34 2011
@@ -225,7 +225,7 @@ register_ShowNet(Continuation * c, HTTPH
     s->sarg = xstrndup(query, query_len);
     char *gn = NULL;
     if (s->sarg)
-      gn = (char *) ink_memchr(s->sarg, '=', strlen(s->sarg));
+      gn = (char *)memchr(s->sarg, '=', strlen(s->sarg));
     if (gn)
       s->ip = ink_inet_addr(gn + 1);
     SET_CONTINUATION_HANDLER(s, &ShowNet::showConnections);
@@ -235,7 +235,7 @@ register_ShowNet(Continuation * c, HTTPH
     s->sarg = xstrndup(query, query_len);
     char *gn = NULL;
     if (s->sarg)
-      gn = (char *) ink_memchr(s->sarg, '=', strlen(s->sarg));
+      gn = (char *)memchr(s->sarg, '=', strlen(s->sarg));
     if (gn)
       s->port = atoi(gn + 1);
     SET_CONTINUATION_HANDLER(s, &ShowNet::showConnections);

Modified: trafficserver/traffic/trunk/lib/ts/ink_string++.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_string%2B%2B.cc?rev=1102889&r1=1102888&r2=1102889&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_string++.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_string++.cc Fri May 13 20:34:34 2011
@@ -36,140 +36,6 @@
 /*-------------------------------------------------------------------------
   -------------------------------------------------------------------------*/
 
-void *
-ink_memchr(const void *as, int ac, size_t an)
-{
-  unsigned char c = (unsigned char) ac;
-  unsigned char *s = (unsigned char *) as;
-
-  // initial segment
-
-  int i_len = (int)(((uintptr_t) 8 - (uintptr_t) as) & 7);
-
-  // too short to concern us
-
-  if ((int) an < i_len) {
-    for (int i = 0; i < (int) an; i++)
-      if (s[i] == c)
-        return &s[i];
-    return 0;
-  }
-  // bytes 0-3
-
-  // Is this right?  I would think this should be (4 - i_len&3)...
-  switch (i_len & 3) {
-  case 3:
-    if (*s++ == c)
-      return s - 1;
-  case 2:
-    if (*s++ == c)
-      return s - 1;
-  case 1:
-    if (*s++ == c)
-      return s - 1;
-  case 0:
-    break;
-  }
-
-  // bytes 4-8
-
-  unsigned int ib = c;
-  ib |= (ib << 8);
-  ib |= (ib << 16);
-  unsigned int im = 0x7efefeff;
-  if (i_len & 4) {
-    unsigned int ibp = *(unsigned int *) s;
-    unsigned int ibb = ibp ^ ib;
-    ibb = ((ibb + im) ^ ~ibb) & ~im;
-    if (ibb) {
-      if (s[0] == c)
-        return &s[0];
-      if (s[1] == c)
-        return &s[1];
-      if (s[2] == c)
-        return &s[2];
-      if (s[3] == c)
-        return &s[3];
-    }
-    s += 4;
-  }
-  // next 8x bytes
-  uint64_t m = 0x7efefefefefefeffLL;
-  uint64_t b = ((uint64_t) ib);
-  b |= (b << 32);
-  uint64_t *p = (uint64_t *) s;
-  unsigned int n = (unsigned int) ((((unsigned int) an) - (s - (unsigned char *) as)) >> 3);
-  uint64_t *end = p + n;
-  while (p < end) {
-    uint64_t bp = *p;
-    uint64_t bb = bp ^ b;
-    bb = ((bb + m) ^ ~bb) & ~m;
-    if (bb) {
-      s = (unsigned char *) p;
-      if (s[0] == c)
-        return &s[0];
-      if (s[1] == c)
-        return &s[1];
-      if (s[2] == c)
-        return &s[2];
-      if (s[3] == c)
-        return &s[3];
-      if (s[4] == c)
-        return &s[4];
-      if (s[5] == c)
-        return &s[5];
-      if (s[6] == c)
-        return &s[6];
-      if (s[7] == c)
-        return &s[7];
-    }
-    p++;
-  }
-
-  // terminal segement
-
-  i_len = (int) (an - (((unsigned char *) p) - ((unsigned char *) as)));
-  s = (unsigned char *) p;
-
-  // n-(4..8)..n bytes
-
-  if (i_len & 4) {
-    unsigned int ibp = *(unsigned int *) s;
-    unsigned int ibb = ibp ^ ib;
-    ibb = ((ibb + im) ^ ~ibb) & ~im;
-    if (ibb) {
-      if (s[0] == c)
-        return &s[0];
-      if (s[1] == c)
-        return &s[1];
-      if (s[2] == c)
-        return &s[2];
-      if (s[3] == c)
-        return &s[3];
-    }
-    s += 4;
-  }
-  // n-(0..3)..n bytes
-
-  switch (i_len & 3) {
-  case 3:
-    if (*s++ == c)
-      return s - 1;
-  case 2:
-    if (*s++ == c)
-      return s - 1;
-  case 1:
-    if (*s++ == c)
-      return s - 1;
-  case 0:
-    break;
-  }
-  return 0;
-}
-
-/*-------------------------------------------------------------------------
-  -------------------------------------------------------------------------*/
-
 char *
 ink_memcpy_until_char(char *dst, char *src, unsigned int n, unsigned char c)
 {

Modified: trafficserver/traffic/trunk/lib/ts/ink_string++.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_string%2B%2B.h?rev=1102889&r1=1102888&r2=1102889&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_string++.h (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_string++.h Fri May 13 20:34:34 2011
@@ -64,8 +64,6 @@ _strlen(const char *src)
   return (int) (src - old_src);
 }
 
-void *ink_memchr(const void *as, int ac, size_t an);
-
 /***********************************************************************
  *                                                                     *
  *                     Str (string/length list cell)                   *

Modified: trafficserver/traffic/trunk/proxy/http/HttpTransact.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http/HttpTransact.h?rev=1102889&r1=1102888&r2=1102889&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http/HttpTransact.h (original)
+++ trafficserver/traffic/trunk/proxy/http/HttpTransact.h Fri May 13 20:34:34 2011
@@ -1469,14 +1469,11 @@ is_response_body_precluded(HTTPStatus st
   }
 }
 
-inkcoreapi extern
-  ink_time_t
-ink_cluster_time(void);
+inkcoreapi extern ink_time_t ink_cluster_time(void);
 
 inline void
 HttpTransact::update_stat(State* s, int stat, ink_statval_t increment)
 {
-
   if (s->current_stats->next_insert >= StatBlockEntries) {
     // This a rare operation and we want to avoid the
     //   code bloat of inlining it everywhere so

Modified: trafficserver/traffic/trunk/proxy/http/remap/RemapProcessor.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http/remap/RemapProcessor.cc?rev=1102889&r1=1102888&r2=1102889&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http/remap/RemapProcessor.cc (original)
+++ trafficserver/traffic/trunk/proxy/http/remap/RemapProcessor.cc Fri May 13 20:34:34 2011
@@ -107,6 +107,10 @@ RemapProcessor::setup_for_remap(HttpTran
       // we need to copy it. Perhaps it's because it's simpler to just
       // do the remap on the URL and then fix the field at the end.
       request_header->set_url_target_from_host_field();
+
+      // TODO: This is pretty slow, and only used for logging. Can we by chance avoid
+      // doing this is nothing is known to need it ? Perhaps the log library could
+      // have a table with status of what resources is necessary.
       *orig_url = request_url->string_get_ref(NULL);
     }
   }