You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ge...@apache.org on 2010/02/24 19:48:52 UTC

svn commit: r915922 [10/14] - in /incubator/trafficserver/traffic/trunk: ./ install/ iocore/aio/ iocore/block-cache/ iocore/cache/ iocore/cluster/ iocore/dns/ iocore/eventsystem/ iocore/hostdb/ iocore/net/ iocore/utils/ libev/ libev/CVS/ libinktomi++/ ...

Modified: incubator/trafficserver/traffic/trunk/iocore/net/UnixNetVConnection.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/iocore/net/UnixNetVConnection.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/iocore/net/UnixNetVConnection.cc (original)
+++ incubator/trafficserver/traffic/trunk/iocore/net/UnixNetVConnection.cc Wed Feb 24 18:48:42 2010
@@ -38,29 +38,22 @@
 #define NET_MAX_IOV UIO_MAXIOV
 #endif
 
-#ifdef DEBUG
-// Initialize class UnixNetVConnection static data
-int
-  UnixNetVConnection::enable_debug_trace = 0;
-#endif
-
 // Global
 ClassAllocator<UnixNetVConnection> netVCAllocator("netVCAllocator");
 
 //
 // Prototypes
 //
-void
-net_update_priority(NetHandler * nh, UnixNetVConnection * vc, NetState * ns, int ndone);
-
+void net_update_priority(NetHandler *nh, UnixNetVConnection *vc, NetState *ns, int ndone);
 
 //
-// Reschedule a UnixNetVConnection by placing the VC 
-// into ready_list or wait_list
+// Reschedule a UnixNetVConnection by moving it
+// onto or off of the ready_list
 //
 static inline void
-read_reschedule(NetHandler * nh, UnixNetVConnection * vc)
+read_reschedule(NetHandler *nh, UnixNetVConnection *vc)
 {
+  vc->ep.refresh(EVENTIO_READ);
   if (vc->read.triggered && vc->read.enabled) {
     nh->read_ready_list.in_or_enqueue(vc);
   } else
@@ -68,8 +61,9 @@
 }
 
 static inline void
-write_reschedule(NetHandler * nh, UnixNetVConnection * vc)
+write_reschedule(NetHandler *nh, UnixNetVConnection *vc)
 {
+  vc->ep.refresh(EVENTIO_WRITE);
   if (vc->write.triggered && vc->write.enabled) {
     nh->write_ready_list.in_or_enqueue(vc);
   } else
@@ -77,7 +71,7 @@
 }
 
 void
-net_activity(UnixNetVConnection * vc, EThread * thread)
+net_activity(UnixNetVConnection *vc, EThread *thread)
 {
   (void) thread;
 #ifdef INACTIVITY_TIMEOUT
@@ -93,9 +87,8 @@
   }
 #else
   vc->next_inactivity_timeout_at = 0;
-  if (vc->inactivity_timeout_in) {
+  if (vc->inactivity_timeout_in)
     vc->next_inactivity_timeout_at = ink_get_hrtime() + vc->inactivity_timeout_in;
-  }
 #endif
 
 }
@@ -104,36 +97,19 @@
 // Function used to close a UnixNetVConnection and free the vc
 //
 void
-close_UnixNetVConnection(UnixNetVConnection * vc, EThread * t)
+close_UnixNetVConnection(UnixNetVConnection *vc, EThread *t)
 {
   if (vc->loggingEnabled()) {
     vc->addLogMessage("close_UnixNetVConnection");
     // display the slow log for the http client session
-    if (vc->getLogsTotalTime() / 1000000 > 30000)
+    if (vc->getLogsTotalTime() / HRTIME_MSECOND > 100)
       vc->printLogs();
     vc->clearLogs();
   }
-
   vc->cancel_OOB();
-
-  PollDescriptor *pd = get_PollDescriptor(t);
-#if defined(USE_EPOLL)
-  struct epoll_event ev;
-  memset(&ev, 0, sizeof(struct epoll_event));
-  ev.events = EPOLLIN | EPOLLOUT | EPOLLET;
-  epoll_ctl(pd->epoll_fd, EPOLL_CTL_DEL, vc->con.fd, &ev);
-#elif defined(USE_KQUEUE)
-  struct kevent ev[2];
-  EV_SET(&ev[0], vc->con.fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
-  EV_SET(&ev[1], vc->con.fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
-  kevent(pd->kqueue_fd, &ev[0], 2, NULL, 0, NULL);
-#else
-#error port me
-#endif
-
+  vc->ep.stop();
   socketManager.fast_close(vc->con.fd);
   vc->con.fd = NO_FD;
-
 #ifdef INACTIVITY_TIMEOUT
   if (vc->inactivity_timeout) {
     vc->inactivity_timeout->cancel_action(vc);
@@ -148,24 +124,18 @@
     vc->active_timeout = NULL;
   }
   vc->active_timeout_in = 0;
-
   NetHandler *nh = vc->nh;
   nh->open_list.remove(vc);
   nh->read_ready_list.remove(vc);
   nh->write_ready_list.remove(vc);
   if (vc->read.in_enabled_list) {
-    ink_assert(vc->closed);
-    ink_assert(nh->read_enable_list.remove(vc) == vc);
+    nh->read_enable_list.remove(vc);
     vc->read.in_enabled_list = 0;
   }
-  ink_assert(vc->read.enable_link.next == NULL);
   if (vc->write.in_enabled_list) {
-    ink_assert(vc->closed);
-    ink_assert(nh->write_enable_list.remove(vc) == vc);
+    nh->write_enable_list.remove(vc);
     vc->write.in_enabled_list = 0;
   }
-  ink_assert(vc->write.enable_link.next == NULL);
-
   vc->free(t);
 }
 
@@ -173,7 +143,7 @@
 // Signal an event
 //
 static inline int
-read_signal_and_update(int event, UnixNetVConnection * vc)
+read_signal_and_update(int event, UnixNetVConnection *vc)
 {
   vc->recursion++;
   vc->read.vio._cont->handleEvent(event, &vc->read.vio);
@@ -188,7 +158,7 @@
 }
 
 static inline int
-write_signal_and_update(int event, UnixNetVConnection * vc)
+write_signal_and_update(int event, UnixNetVConnection *vc)
 {
   vc->recursion++;
   vc->write.vio._cont->handleEvent(event, &vc->write.vio);
@@ -203,7 +173,7 @@
 }
 
 static inline int
-read_signal_done(int event, NetHandler * nh, UnixNetVConnection * vc)
+read_signal_done(int event, NetHandler *nh, UnixNetVConnection *vc)
 {
   vc->read.enabled = 0;
   if (read_signal_and_update(event, vc) == EVENT_DONE) {
@@ -215,7 +185,7 @@
 }
 
 static inline int
-write_signal_done(int event, NetHandler * nh, UnixNetVConnection * vc)
+write_signal_done(int event, NetHandler *nh, UnixNetVConnection *vc)
 {
   vc->write.enabled = 0;
   if (write_signal_and_update(event, vc) == EVENT_DONE) {
@@ -227,29 +197,29 @@
 }
 
 static inline int
-read_signal_error(NetHandler * nh, UnixNetVConnection * vc, int lerrno)
+read_signal_error(NetHandler *nh, UnixNetVConnection *vc, int lerrno)
 {
   vc->lerrno = lerrno;
   return read_signal_done(VC_EVENT_ERROR, nh, vc);
 }
 
 static inline int
-write_signal_error(NetHandler * nh, UnixNetVConnection * vc, int lerrno)
+write_signal_error(NetHandler *nh, UnixNetVConnection *vc, int lerrno)
 {
   vc->lerrno = lerrno;
   return write_signal_done(VC_EVENT_ERROR, nh, vc);
 }
 
-// read the data for a UnixNetVConnection.
-// Rescheduling the UnixNetVConnection by placing the VC into 
-// ready_list (or) wait_list
-// Had to wrap this function with net_read_io to make SSL work..
+// Read the data for a UnixNetVConnection.
+// Rescheduling the UnixNetVConnection by moving the VC 
+// onto or off of the ready_list.
+// Had to wrap this function with net_read_io for SSL.
 static void
-read_from_net(NetHandler * nh, UnixNetVConnection * vc, EThread * thread)
+read_from_net(NetHandler *nh, UnixNetVConnection *vc, EThread *thread)
 {
   vc->addLogMessage("read from net");
-  NetState * s = &vc->read;
-  ProxyMutex * mutex = thread->mutex;
+  NetState *s = &vc->read;
+  ProxyMutex *mutex = thread->mutex;
   MIOBufferAccessor & buf = s->vio.buffer;
   int r = 0;
 
@@ -257,9 +227,10 @@
 
   if (!lock || lock.m.m_ptr != s->vio.mutex.m_ptr) {
     vc->addLogMessage("can't get lock");
+    read_reschedule(nh, vc);
     return;
   }
-  // If it is not enabled.  
+  // if it is not enabled.  
   if (!s->enabled || s->vio.op != VIO::READ) {
     vc->addLogMessage("not enabled");
     read_disable(nh, vc);
@@ -268,39 +239,30 @@
 
   ink_debug_assert(buf.writer());
 
-  // If there is nothing to do, disable connection
-  // and add into WaitList
-  int
-    ntodo = s->vio.ntodo();
+  // if there is nothing to do, disable connection
+  int ntodo = s->vio.ntodo();
   if (ntodo <= 0) {
     read_disable(nh, vc);
     return;
   }
-  // Calculate amount to read
-  int
-    toread = buf.writer()->write_avail();
+  int toread = buf.writer()->write_avail();
   if (toread > ntodo)
     toread = ntodo;
 
-  // Read data
-  int
-    rattempted = 0, total_read = 0;
-  int
-    niov = 0;
+  // read data
+  int rattempted = 0, total_read = 0;
+  int niov = 0;
   IOVec tiovec[NET_MAX_IOV];
   if (toread) {
-    IOBufferBlock *
-      b = buf.mbuf->_writer;
+    IOBufferBlock *b = buf.mbuf->_writer;
     do {
       niov = 0;
       rattempted = 0;
       while (b && niov < NET_MAX_IOV) {
-        int
-          a = b->write_avail();
+        int a = b->write_avail();
         if (a > 0) {
           tiovec[niov].iov_base = b->_end;
-          int
-            togo = toread - total_read - rattempted;
+          int togo = toread - total_read - rattempted;
           if (a > togo)
             a = togo;
           tiovec[niov].iov_len = a;
@@ -316,20 +278,17 @@
       } else {
         r = socketManager.readv(vc->con.fd, &tiovec[0], niov);
       }
-      //ProxyMutex *mutex = thread->mutex;
       NET_DEBUG_COUNT_DYN_STAT(net_calls_to_read_stat, 1);
       total_read += rattempted;
     } while (r == rattempted && total_read < toread);
 
     if (vc->loggingEnabled()) {
-      char
-        message[256];
+      char message[256];
       snprintf(message, sizeof(message), "rval: %d toread: %d ntodo: %d total_read: %d", r, toread, ntodo, total_read);
       vc->addLogMessage(message);
     }
     // if we have already moved some bytes successfully, summarize in r
     if (total_read != rattempted) {
-
       if (r <= 0)
         r = total_read - rattempted;
       else
@@ -338,7 +297,6 @@
     // check for errors
     if (r <= 0) {
 
-      // If the socket was not ready,add into the WaitList
       if (r == -EAGAIN || r == -ENOTCONN) {
         NET_DEBUG_COUNT_DYN_STAT(net_calls_to_read_nodata_stat, 1);
         vc->addLogMessage("EAGAIN or ENOTCONN");
@@ -348,13 +306,6 @@
       }
 
       if (!r || r == -ECONNRESET) {
-        // display the slow log for the http client session
-        if (vc->loggingEnabled()) {
-          if (vc->getLogsTotalTime() / 1000000 > 30000)
-            vc->printLogs();
-          vc->clearLogs();
-        }
-        // connection is closed
         vc->read.triggered = 0;
         nh->read_ready_list.remove(vc);
         read_signal_done(VC_EVENT_EOS, nh, vc);
@@ -370,14 +321,12 @@
     buf.writer()->fill(r);
 #ifdef DEBUG
     if (buf.writer()->write_avail() <= 0)
-      Debug("ssl", "read_from_net, read buffer full");
+      NetDebug("iocore_net", "read_from_net, read buffer full");
 #endif
     s->vio.ndone += r;
-
     net_activity(vc, thread);
-  } else {
+  } else
     r = 0;
-  }
 
   // Signal read ready, check if user is not done
   if (r) {
@@ -385,13 +334,11 @@
     ink_assert(ntodo >= 0);
     if (s->vio.ntodo() <= 0) {
       read_signal_done(VC_EVENT_READ_COMPLETE, nh, vc);
-      Debug("ssl", "read_from_net, read finished - signal done");
+      NetDebug("iocore_net", "read_from_net, read finished - signal done");
       return;
     } else {
-      if (read_signal_and_update(VC_EVENT_READ_READY, vc) != EVENT_CONT) {
+      if (read_signal_and_update(VC_EVENT_READ_READY, vc) != EVENT_CONT)
         return;
-      }
-      // ink_assert(s->enabled);
       // change of lock... don't look at shared variables!
       if (lock.m.m_ptr != s->vio.mutex.m_ptr) {
         read_reschedule(nh, vc);
@@ -414,7 +361,7 @@
 // Rescheduling the UnixNetVConnection when necessary.
 //
 void
-write_to_net(NetHandler * nh, UnixNetVConnection * vc, PollDescriptor * pd, EThread * thread)
+write_to_net(NetHandler *nh, UnixNetVConnection *vc, PollDescriptor *pd, EThread *thread)
 {
   ProxyMutex *mutex = thread->mutex;
 
@@ -426,7 +373,7 @@
 
 
 void
-write_to_net_io(NetHandler * nh, UnixNetVConnection * vc, EThread * thread)
+write_to_net_io(NetHandler *nh, UnixNetVConnection *vc, EThread *thread)
 {
   vc->addLogMessage("write to net io");
 
@@ -435,8 +382,11 @@
 
   MUTEX_TRY_LOCK_FOR(lock, s->vio.mutex, thread, s->vio._cont);
 
-  if (!lock || lock.m.m_ptr != s->vio.mutex.m_ptr)
+  if (!lock || lock.m.m_ptr != s->vio.mutex.m_ptr) {
+    vc->addLogMessage("can't get lock");
+    write_reschedule(nh, vc);
     return;
+  }
 
   // This function will always return true unless
   // vc is an SSLNetVConnection.
@@ -525,7 +475,7 @@
       r = total_wrote - wattempted + r;
   }
   // check for errors
-  if (r <= 0) {                 // If the socket was not ready,add to WaitList
+  if (r <= 0) {                 // if the socket was not ready,add to WaitList
     if (r == -EAGAIN || r == -ENOTCONN) {
       NET_DEBUG_COUNT_DYN_STAT(net_calls_to_write_nodata_stat, 1);
       vc->write.triggered = 0;
@@ -577,8 +527,9 @@
 
 
 VIO *
-UnixNetVConnection::do_io_read(Continuation * c, int nbytes, MIOBuffer * buf)
+UnixNetVConnection::do_io_read(Continuation *c, ink64 nbytes, MIOBuffer *buf)
 {
+  addLogMessage("do_io_read");
   ink_assert(!closed);
   if (buf)
     read.vio.buffer.writer_for(buf);
@@ -593,14 +544,13 @@
   if (buf) {
     if (!read.enabled)
       read.vio.reenable();
-  } else {
+  } else
     disable_read(this);
-  }
   return &read.vio;
 }
 
 VIO *
-UnixNetVConnection::do_io_write(Continuation * acont, int anbytes, IOBufferReader * abuffer, bool owner)
+UnixNetVConnection::do_io_write(Continuation *acont, ink64 anbytes, IOBufferReader *abuffer, bool owner)
 {
   addLogMessage("do_io_write");
   ink_assert(!closed);
@@ -618,9 +568,8 @@
   if (abuffer) {
     if (!write.enabled)
       write.vio.reenable();
-  } else {
+  } else
     disable_write(this);
-  }
   return &write.vio;
 }
 
@@ -628,14 +577,7 @@
 void
 UnixNetVConnection::do_io_close(int alerrno /* = -1 */ )
 {
-  if (loggingEnabled()) {
-    addLogMessage("UnixNetVConnection::do_io_close");
-    // display the slow log for the http client session
-    if (getLogsTotalTime() / 1000000 > 30000) {
-      printLogs();
-    }
-    clearLogs();
-  }
+  addLogMessage("UnixNetVConnection::do_io_close");
 
   disable_read(this);
   disable_write(this);
@@ -649,10 +591,15 @@
   INK_WRITE_MEMORY_BARRIER;
   if (alerrno && alerrno != -1)
     this->lerrno = alerrno;
-  if (alerrno == -1) {
+  if (alerrno == -1)
     closed = 1;
-  } else {
+  else
     closed = -1;
+
+  if (!recursion) {
+     EThread *t = this_ethread();
+     if (nh->mutex->thread_holding == t)
+       close_UnixNetVConnection(this, t);
   }
 }
 
@@ -691,7 +638,7 @@
 }
 
 int
-OOB_callback::retry_OOB_send(int event, Event * e)
+OOB_callback::retry_OOB_send(int event, Event *e)
 {
   (void) event;
   (void) e;
@@ -718,7 +665,7 @@
 }
 
 Action *
-UnixNetVConnection::send_OOB(Continuation * cont, char *buf, int len)
+UnixNetVConnection::send_OOB(Continuation *cont, char *buf, int len)
 {
   UnixNetVConnection *u = (UnixNetVConnection *) this;
   ink_debug_assert(len > 0);
@@ -754,7 +701,7 @@
 // writing.
 //
 void
-UnixNetVConnection::reenable(VIO * vio)
+UnixNetVConnection::reenable(VIO *vio)
 {
   if (STATE_FROM_VIO(vio)->enabled)
     return;
@@ -765,11 +712,15 @@
   ink_debug_assert(t == this_ethread());
   if (nh->mutex->thread_holding == t) {
     if (vio == &read.vio) {
+      ep.modify(EVENTIO_READ);
+      ep.refresh(EVENTIO_READ);
       if (read.triggered)
         nh->read_ready_list.in_or_enqueue(this);
       else
         nh->read_ready_list.remove(this);
     } else {
+      ep.modify(EVENTIO_WRITE);
+      ep.refresh(EVENTIO_WRITE);
       if (write.triggered)
         nh->write_ready_list.in_or_enqueue(this);
       else
@@ -791,11 +742,15 @@
       }
     } else {
       if (vio == &read.vio) {
+        ep.modify(EVENTIO_READ);
+	ep.refresh(EVENTIO_READ);
         if (read.triggered)
           nh->read_ready_list.in_or_enqueue(this);
         else
           nh->read_ready_list.remove(this);
       } else {
+        ep.modify(EVENTIO_WRITE);
+	ep.refresh(EVENTIO_WRITE);
         if (write.triggered)
           nh->write_ready_list.in_or_enqueue(this);
         else
@@ -806,26 +761,31 @@
 }
 
 void
-UnixNetVConnection::reenable_re(VIO * vio)
+UnixNetVConnection::reenable_re(VIO *vio)
 {
-  set_enabled(vio);
   if (!thread)
     return;
   EThread *t = vio->mutex->thread_holding;
   ink_debug_assert(t == this_ethread());
   if (nh->mutex->thread_holding == t) {
+    set_enabled(vio);
     if (vio == &read.vio) {
+      ep.modify(EVENTIO_READ);
+      ep.refresh(EVENTIO_READ);
       if (read.triggered)
         net_read_io(nh, t);
       else
         nh->read_ready_list.remove(this);
     } else {
+      ep.modify(EVENTIO_WRITE);
+      ep.refresh(EVENTIO_WRITE);
       if (write.triggered)
         write_to_net(nh, this, NULL, t);
       else
         nh->write_ready_list.remove(this);
     }
-  }
+  } else
+    reenable(vio);
 }
 
 
@@ -847,19 +807,11 @@
 // Private methods
 
 void
-UnixNetVConnection::set_enabled(VIO * vio)
+UnixNetVConnection::set_enabled(VIO *vio)
 {
   ink_debug_assert(vio->mutex->thread_holding == this_ethread());
   ink_assert(!closed);
   STATE_FROM_VIO(vio)->enabled = 1;
-#ifdef DEBUG
-  if (vio == &read.vio) {
-    if (enable_debug_trace && (vio->buffer.mbuf && !vio->buffer.writer()->write_avail()));
-  } else {
-    ink_assert(vio == &write.vio);
-    if (enable_debug_trace && (vio->buffer.mbuf && !vio->buffer.reader()->read_avail()));
-  }
-#endif
 #ifdef INACTIVITY_TIMEOUT
   if (!inactivity_timeout && inactivity_timeout_in)
     inactivity_timeout = vio->mutex->thread_holding->schedule_in_local(this, inactivity_timeout_in);
@@ -870,7 +822,7 @@
 }
 
 void
-UnixNetVConnection::net_read_io(NetHandler * nh, EThread * lthread)
+UnixNetVConnection::net_read_io(NetHandler *nh, EThread *lthread)
 {
   read_from_net(nh, this, lthread);
 }
@@ -925,19 +877,19 @@
 }
 
 void
-UnixNetVConnection::readDisable(NetHandler * nh)
+UnixNetVConnection::readDisable(NetHandler *nh)
 {
   read_disable(nh, this);
 }
 
 void
-UnixNetVConnection::readSignalError(NetHandler * nh, int err)
+UnixNetVConnection::readSignalError(NetHandler *nh, int err)
 {
   read_signal_error(nh, this, err);
 }
 
 int
-UnixNetVConnection::readSignalDone(int event, NetHandler * nh)
+UnixNetVConnection::readSignalDone(int event, NetHandler *nh)
 {
   return (read_signal_done(event, nh, this));
 }
@@ -953,21 +905,25 @@
 // without affecting regular net stuff or copying a bunch of code into
 // the header files.
 void
-UnixNetVConnection::readReschedule(NetHandler * nh)
+UnixNetVConnection::readReschedule(NetHandler *nh)
 {
   read_reschedule(nh, this);
 }
 
 void
-UnixNetVConnection::netActivity(EThread * lthread)
+UnixNetVConnection::writeReschedule(NetHandler *nh)
 {
-  net_activity(this, lthread);
+  write_reschedule(nh, this);
 }
 
-
+void
+UnixNetVConnection::netActivity(EThread *lthread)
+{
+  net_activity(this, lthread);
+}
 
 int
-UnixNetVConnection::startEvent(int event, Event * e)
+UnixNetVConnection::startEvent(int event, Event *e)
 {
   (void) event;
   MUTEX_TRY_LOCK(lock, action_.mutex, e->ethread);
@@ -985,7 +941,7 @@
 }
 
 int
-UnixNetVConnection::acceptEvent(int event, Event * e)
+UnixNetVConnection::acceptEvent(int event, Event *e)
 {
   (void) event;
   thread = e->ethread;
@@ -1010,33 +966,11 @@
 
   nh = get_NetHandler(thread);
   PollDescriptor *pd = get_PollDescriptor(thread);
-  ep.type = EPOLL_READWRITE_VC;
-  ep.data.vc = this;
-
-#if defined(USE_EPOLL)
-  struct epoll_event ev;
-  memset(&ev, 0, sizeof(struct epoll_event));
-
-  ev.events = EPOLLIN | EPOLLOUT | EPOLLET;
-  ev.data.ptr = &ep;
-  //printf("Added to epoll ctl fd %d and number is %d\n",con.fd,id);
-  if (epoll_ctl(pd->epoll_fd, EPOLL_CTL_ADD, con.fd, &ev) < 0) {
-    Debug("iocore_net", "acceptEvent : Failed to add to epoll list\n");
-    close_UnixNetVConnection(this, e->ethread);
-    return EVENT_DONE;
-  }
-#elif defined(USE_KQUEUE)
-  struct kevent ev[2];
-  EV_SET(&ev[0], con.fd, EVFILT_READ, EV_ADD, 0, 0, &ep);
-  EV_SET(&ev[1], con.fd, EVFILT_WRITE, EV_ADD, 0, 0, &ep);
-  if (kevent(pd->kqueue_fd, &ev[0], 2, NULL, 0, NULL) < 0) {
-    Debug("iocore_net", "acceptEvent : Failed to add to kqueue list\n");
+  if (ep.start(pd, this, EVENTIO_READ|EVENTIO_WRITE) < 0) {
+    NetDebug("iocore_net", "acceptEvent : failed EventIO::start\n");
     close_UnixNetVConnection(this, e->ethread);
     return EVENT_DONE;
   }
-#else
-#error port me
-#endif
 
   nh->open_list.enqueue(this);
 
@@ -1054,7 +988,7 @@
 // and for active and inactivity timeouts.
 //
 int
-UnixNetVConnection::mainEvent(int event, Event * e)
+UnixNetVConnection::mainEvent(int event, Event *e)
 {
   addLogMessage("main event");
   ink_debug_assert(event == EVENT_IMMEDIATE || event == EVENT_INTERVAL);
@@ -1131,7 +1065,7 @@
 
 
 int
-UnixNetVConnection::connectUp(EThread * t)
+UnixNetVConnection::connectUp(EThread *t)
 {
   addLogMessage("connectUp");
 
@@ -1146,68 +1080,47 @@
   // Initialize this UnixNetVConnection
   //
   int res = 0;
-  Debug("arm_spoofing", "connectUp:: interface=%x and options.spoofip=%x\n", _interface, options.spoof_ip);
-  if (_interface || options.local_port || options.spoof_ip) {
-    // TODO move socketManager.socket() and epoll_ctl here too
-
+  NetDebug("arm_spoofing", "connectUp:: interface=%x and options.spoofip=%x\n", _interface, options.spoof_ip);
+  nh = get_NetHandler(t);
+#ifndef USE_EDGE_TRIGGER
+  if (_interface || options.local_port || options.spoof_ip)
     res = con.bind_connect(ip, port, _interface, &options);
-  } else {
-    // we need to add the socket to the epoll fd before we call connect or we can miss an event
-    int socketFd = -1;
-    if ((socketFd = socketManager.socket(AF_INET, SOCK_STREAM, 0)) >= 0) {
-
-      // this should be moved into a PollDescriptor method
-      nh = get_NetHandler(t);
-      PollDescriptor *pd = get_PollDescriptor(t);
-
-      ep.type = EPOLL_READWRITE_VC;
-      ep.data.vc = this;
-
-#if defined(USE_EPOLL)
-      struct epoll_event ev;
-      memset(&ev, 0, sizeof(struct epoll_event));
-      ev.events = EPOLLIN | EPOLLOUT | EPOLLET;
-      ev.data.ptr = &ep;
-      int rval = epoll_ctl(pd->epoll_fd, EPOLL_CTL_ADD, socketFd, &ev);
-      if (rval != 0) {
-        lerrno = errno;
-        Debug("iocore_net", "connectUp : Failed to add to epoll list\n");
-        action_.continuation->handleEvent(NET_EVENT_OPEN_FAILED, (void *)(intptr_t)rval);
-        free(t);
-        return CONNECT_FAILURE;
-      }
-#elif defined(USE_KQUEUE)
-      struct kevent ev[2];
-      EV_SET(&ev[0], socketFd, EVFILT_READ, EV_ADD, 0, 0, &ep);
-      EV_SET(&ev[1], socketFd, EVFILT_WRITE, EV_ADD, 0, 0, &ep);
-      int rval = kevent(pd->kqueue_fd, &ev[0], 2, NULL, 0, NULL);
-      if (rval < 0) {
-        lerrno = errno;
-        Debug("iocore_net", "connectUp : Failed to add to kqueue list\n");
-        action_.continuation->handleEvent(NET_EVENT_OPEN_FAILED, (void *)(intptr_t)rval);
-        free(t);
-        return CONNECT_FAILURE;
-      }
+  else
+    res = con.fast_connect(ip, port, &options);
 #else
-#error port me
+  int sock = -1;
+  if ((sock = socketManager.socket(AF_INET, SOCK_STREAM, 0)) < 0)
+    goto Lfailure;
+  con.fd = sock;
 #endif
-      res = con.fast_connect(ip, port, &options, socketFd);
-    } else {
-      res = socketFd;
-    }
+  if (ep.start(get_PollDescriptor(t), this, EVENTIO_READ|EVENTIO_WRITE) < 0) {
+    lerrno = errno;
+    NetDebug("iocore_net", "connectUp : Failed to add to epoll list\n");
+    action_.continuation->handleEvent(NET_EVENT_OPEN_FAILED, (void *) res);
+    free(t);
+    return CONNECT_FAILURE;
   }
+#ifdef USE_EDGE_TRIGGER
+  // must be called after EventIO::start() to avoid race with edge triggering
+  if (_interface || options.local_port || options.spoof_ip)
+    res = con.bind_connect(ip, port, _interface, &options, sock);
+  else
+    res = con.fast_connect(ip, port, &options, sock);
+#endif
   if (res) {
+#ifdef USE_EDGE_TRIGGER
+  Lfailure:
+#endif
     lerrno = errno;
     action_.continuation->handleEvent(NET_EVENT_OPEN_FAILED, (void *)(intptr_t)res);
     free(t);
     return CONNECT_FAILURE;
   }
-
   check_emergency_throttle(con);
 
   // start up next round immediately
 
-  SET_HANDLER((NetVConnHandler) & UnixNetVConnection::mainEvent);
+  SET_HANDLER(&UnixNetVConnection::mainEvent);
   // This function is empty for regular UnixNetVConnection, it has code
   // in it for the inherited SSLUnixNetVConnection.  Allows the connectUp 
   // function code not to be duplicated in the inherited SSL class.
@@ -1216,38 +1129,13 @@
   if (_interface || options.local_port || options.spoof_ip) {
     nh = get_NetHandler(t);
     PollDescriptor *pd = get_PollDescriptor(t);
-
-    ep.type = EPOLL_READWRITE_VC;
-    ep.data.vc = this;
-
-#if defined(USE_EPOLL)
-    struct epoll_event ev;
-    memset(&ev, 0, sizeof(struct epoll_event));
-    ev.events = EPOLLIN | EPOLLOUT | EPOLLET;
-    ev.data.ptr = &ep;
-    res = epoll_ctl(pd->epoll_fd, EPOLL_CTL_ADD, con.fd, &ev);
-    if (res < 0) {
-      Debug("iocore_net", "connectUp : Failed to add to epoll list\n");
+    if (ep.start(pd, this, EVENTIO_READ|EVENTIO_WRITE) < 0) {
+      NetDebug("iocore_net", "connectUp : Failed to add to epoll list\n");
       lerrno = errno;
       action_.continuation->handleEvent(NET_EVENT_OPEN_FAILED, (void *)(intptr_t)res);
       free(t);
       return CONNECT_FAILURE;
     }
-#elif defined(USE_KQUEUE)
-    struct kevent ev[2];
-    EV_SET(&ev[0], con.fd, EVFILT_READ, EV_ADD, 0, 0, &ep);
-    EV_SET(&ev[1], con.fd, EVFILT_WRITE, EV_ADD, 0, 0, &ep);
-    res = kevent(pd->kqueue_fd, &ev[0], 2, NULL, 0, NULL);
-    if (res < 0) {
-      lerrno = errno;
-      Debug("iocore_net", "connectUp : Failed to add to kqueue list\n");
-      action_.continuation->handleEvent(NET_EVENT_OPEN_FAILED, (void *)(intptr_t)res);
-      free(t);
-      return CONNECT_FAILURE;
-    }
-#else
-#error port me
-#endif
   }
 
   nh->open_list.enqueue(this);
@@ -1260,7 +1148,7 @@
 
 
 void
-UnixNetVConnection::free(EThread * t)
+UnixNetVConnection::free(EThread *t)
 {
   NET_DECREMENT_THREAD_DYN_STAT(net_connections_currently_open_stat, t);
   // clear variables for reuse
@@ -1277,6 +1165,7 @@
   read.triggered = 0;
   write.triggered = 0;
   options.reset();
+  closed = 0;
   ink_debug_assert(!read.ready_link.prev && !read.ready_link.next);
   ink_debug_assert(!read.enable_link.next);
   ink_debug_assert(!write.ready_link.prev && !write.ready_link.next);
@@ -1285,6 +1174,5 @@
   ink_debug_assert(!active_timeout);
   ink_debug_assert(con.fd == NO_FD);
   ink_debug_assert(t == this_ethread());
-  closed = 0;
   THREAD_FREE(this, netVCAllocator, t);
 }

Modified: incubator/trafficserver/traffic/trunk/iocore/net/UnixUDPConnection.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/iocore/net/UnixUDPConnection.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/iocore/net/UnixUDPConnection.cc (original)
+++ incubator/trafficserver/traffic/trunk/iocore/net/UnixUDPConnection.cc Wed Feb 24 18:48:42 2010
@@ -136,3 +136,22 @@
   get_UDPNetHandler(conn->ethread)->udpOutQueue.send(p);
   return ACTION_RESULT_NONE;
 }
+
+void
+UDPConnection::Release() 
+{
+  UnixUDPConnection *p = (UnixUDPConnection *) this;
+
+  p->ep.stop();
+
+  if (ink_atomic_increment(&p->refcount, -1) == 1) {
+    ink_debug_assert(p->callback_link.next == NULL);
+    ink_debug_assert(p->callback_link.prev == NULL);
+    ink_debug_assert(p->polling_link.next == NULL);
+    ink_debug_assert(p->polling_link.prev == NULL);
+    ink_debug_assert(p->newconn_alink.next == NULL);
+
+    delete this;
+  }
+}
+

Modified: incubator/trafficserver/traffic/trunk/iocore/net/UnixUDPNet.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/iocore/net/UnixUDPNet.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/iocore/net/UnixUDPNet.cc (original)
+++ incubator/trafficserver/traffic/trunk/iocore/net/UnixUDPNet.cc Wed Feb 24 18:48:42 2010
@@ -48,7 +48,7 @@
 //
 
 UDPNetProcessorInternal udpNetInternal;
-UDPNetProcessor & udpNet = udpNetInternal;
+UDPNetProcessor &udpNet = udpNetInternal;
 
 inku64 g_udp_bytesPending;
 ink32 g_udp_periodicCleanupSlots;
@@ -74,6 +74,11 @@
   new((ink_dummy_for_new *) get_UDPPollCont(thread)) PollCont(thread->mutex);
   new((ink_dummy_for_new *) get_UDPNetHandler(thread)) UDPNetHandler;
 
+#if defined(USE_LIBEV)
+  PollCont *pc = get_UDPPollCont(thread);
+  PollDescriptor *pd = pc->pollDescriptor;
+  pd->eio = ev_loop_new(LIBEV_BACKEND_LIST);
+#endif
   // These are hidden variables that control the amount of memory used by UDP
   // packets.  As usual, defaults are in RecordsConfig.cc
 
@@ -207,8 +212,8 @@
     return event;
   }
   void setupPollDescriptor();
-private:
 
+private:
   Event * event;                // the completion event token created
   // on behalf of the client
   Ptr<IOBufferBlock> readbuf;
@@ -217,63 +222,27 @@
   socklen_t *fromaddrlen;
   int fd;                       // fd we are reading from
   int ifd;                      // poll fd index
-
-  int ifd_seq_num;              // some assertable information
-
   ink_hrtime period;            // polling period
   ink_hrtime elapsed_time;
   ink_hrtime timeout_interval;
-
-#ifdef DEBUG_UDP
-  DynArray<ink_hrtime> *eventStamp;
-  DynArray<int>*eventType;
-  int nevents;
-#endif
-  // some i/o information
 };
 
-#ifdef DEBUG_UDP
-static ink_hrtime default_hrtime = NULL;
-static int default_event = 0;
-#endif
-
 ClassAllocator<UDPReadContinuation> udpReadContAllocator("udpReadContAllocator");
 
 UDPReadContinuation::UDPReadContinuation(Event * completionToken)
-:Continuation(NULL),
-event(completionToken),
-readbuf(NULL),
-readlen(0), fromaddrlen(0), fd(-1), ifd(-1), ifd_seq_num(-1), period(0), elapsed_time(0), timeout_interval(0)
-#ifdef DEBUG_UDP
-  , nevents(0)
-#endif
+: Continuation(NULL), event(completionToken), readbuf(NULL),
+  readlen(0), fromaddrlen(0), fd(-1), ifd(-1), period(0), elapsed_time(0), timeout_interval(0)
 {
-#ifdef DEBUG_UDP
-  eventStamp = NEW(new DynArray<ink_hrtime> (&default_hrtime));
-  eventType = NEW(new DynArray<int>(&default_event));
-#endif
-
-  if (completionToken->continuation) {
+  if (completionToken->continuation)
     this->mutex = completionToken->continuation->mutex;
-  } else {
+  else
     this->mutex = new_ProxyMutex();
-  }
 }
 
 UDPReadContinuation::UDPReadContinuation()
-:Continuation(NULL),
-event(0),
-readbuf(NULL),
-readlen(0), fromaddrlen(0), fd(-1), ifd(-1), ifd_seq_num(-1), period(0), elapsed_time(0), timeout_interval(0)
-#ifdef DEBUG_UDP
-  , nevents(0)
-#endif
+: Continuation(NULL), event(0), readbuf(NULL),
+  readlen(0), fromaddrlen(0), fd(-1), ifd(-1), period(0), elapsed_time(0), timeout_interval(0)
 {
-#ifdef DEBUG_UDP
-  eventStamp = NEW(new DynArray<ink_hrtime> (&default_hrtime));
-  eventType = NEW(new DynArray<int>(&default_event));
-#endif
-
 }
 
 inline void
@@ -287,14 +256,10 @@
   fromaddrlen = 0;
   fd = -1;
   ifd = -1;
-  ifd_seq_num = 0;
   period = 0;
   elapsed_time = 0;
   timeout_interval = 0;
   mutex = NULL;
-#ifdef DEBUG_UDP
-  nevents = 0;
-#endif
   udpReadContAllocator.free(this);
 }
 
@@ -312,11 +277,6 @@
 inline void
 UDPReadContinuation::init_read(int rfd, IOBufferBlock * buf, int len, struct sockaddr *fromaddr_, socklen_t *fromaddrlen_)
 {
-#ifdef DEBUG_UDP
-  (*eventStamp) (nevents) = ink_get_hrtime();
-  (*eventType) (nevents) = 0;
-  nevents++;
-#endif
   ink_assert(rfd >= 0 && buf != NULL && fromaddr_ != NULL && fromaddrlen_ != NULL);
   fd = rfd;
   readbuf = buf;
@@ -346,6 +306,7 @@
 void
 UDPReadContinuation::setupPollDescriptor()
 {
+#ifdef USE_EPOLL
   Pollfd *pfd;
   EThread *et = (EThread *) this_thread();
   PollCont *pc = get_PollCont(et);
@@ -353,9 +314,9 @@
   pfd->fd = fd;
   ifd = pfd - pc->nextPollDescriptor->pfd;
   ink_assert(pc->nextPollDescriptor->nfds > ifd);
-  ifd_seq_num = pc->nextPollDescriptor->seq_num;
   pfd->events = POLLIN;
   pfd->revents = 0;
+#endif
 }
 
 int
@@ -365,15 +326,9 @@
   (void) e;
   int res;
 
-  PollCont *pc = get_PollCont(e->ethread);
+  //PollCont *pc = get_PollCont(e->ethread);
   Continuation *c;
 
-#ifdef DEBUG_UDP
-  (*eventStamp) (nevents) = ink_get_hrtime();
-  (*eventType) (nevents) = event_;
-  nevents++;
-#endif
-
   if (event->cancelled) {
     e->cancel();
     free();
@@ -392,11 +347,9 @@
       return EVENT_DONE;
     }
   }
-  ink_assert(ifd < 0 || event_ == EVENT_INTERVAL ||
-             (event_ == EVENT_POLL &&
-              ifd_seq_num == pc->pollDescriptor->seq_num &&
-              pc->pollDescriptor->nfds > ifd && pc->pollDescriptor->pfd[ifd].fd == fd));
-  if (ifd < 0 || event_ == EVENT_INTERVAL || (pc->pollDescriptor->pfd[ifd].revents & POLLIN)) {
+  //ink_assert(ifd < 0 || event_ == EVENT_INTERVAL || (event_ == EVENT_POLL && pc->pollDescriptor->nfds > ifd && pc->pollDescriptor->pfd[ifd].fd == fd));
+  //if (ifd < 0 || event_ == EVENT_INTERVAL || (pc->pollDescriptor->pfd[ifd].revents & POLLIN)) {
+  ink_debug_assert(!"incomplete");
     c = completionUtil::getContinuation(event);
     // do read
     socklen_t tmp_fromlen = *fromaddrlen;
@@ -410,11 +363,6 @@
       *fromaddrlen = tmp_fromlen;
       completionUtil::setInfo(event, fd, readbuf, rlen, errno);
       readbuf->fill(rlen);
-#ifdef DEBUG_UDP
-      (*eventStamp) (nevents) = ink_get_hrtime();
-      (*eventType) (nevents) = NET_EVENT_DATAGRAM_READ_COMPLETE;
-      nevents++;
-#endif
       res = c->handleEvent(NET_EVENT_DATAGRAM_READ_COMPLETE, event);
       e->cancel();
       free();
@@ -425,11 +373,6 @@
       *fromaddrlen = tmp_fromlen;
       completionUtil::setInfo(event, fd, (IOBufferBlock *) readbuf, rlen, errno);
       c = completionUtil::getContinuation(event);
-#ifdef DEBUG_UDP
-      (*eventStamp) (nevents) = ink_get_hrtime();
-      (*eventType) (nevents) = NET_EVENT_DATAGRAM_READ_ERROR;
-      nevents++;
-#endif
       res = c->handleEvent(NET_EVENT_DATAGRAM_READ_ERROR, event);
       e->cancel();
       free();
@@ -438,7 +381,7 @@
     } else {
       completionUtil::setThread(event, NULL);
     }
-  }
+//}
   if (event->cancelled) {
     e->cancel();
     free();
@@ -1229,8 +1172,8 @@
 UDPNetHandler::UDPNetHandler()
 {
   mutex = new_ProxyMutex();
-  ink_atomiclist_init(&udpOutQueue.atomicQueue, "Outgoing UDP Packet queue", offsetof(UDPPacketInternal, alink.next));
-  ink_atomiclist_init(&udpNewConnections, "UDP Connection queue", offsetof(UnixUDPConnection, newconn_alink.next));
+  ink_atomiclist_init(&udpOutQueue.atomicQueue, "Outgoing UDP Packet queue", ink_offsetof(UDPPacketInternal, alink.next));
+  ink_atomiclist_init(&udpNewConnections, "UDP Connection queue", ink_offsetof(UnixUDPConnection, newconn_alink.next));
   nextCheck = ink_get_hrtime_internal() + HRTIME_MSECONDS(1000);
   lastCheck = 0;
   SET_HANDLER((UDPNetContHandler) & UDPNetHandler::startNetEvent);
@@ -1246,36 +1189,6 @@
   return EVENT_CONT;
 }
 
-inline PollDescriptor *
-UDPNetHandler::build_one_udpread_poll(int fd, UnixUDPConnection * uc, PollDescriptor * pd)
-{
-  // XXX: just hack until figure things out
-  ink_assert(uc->getFd() > 0);
-  Pollfd *pfd = pd->alloc();
-  pfd->fd = fd;
-  pfd->events = POLLIN;
-  pfd->revents = 0;
-  return pd;
-}
-
-PollDescriptor *
-UDPNetHandler::build_poll(PollDescriptor * pd)
-{
-  // build read poll for UDP connections.
-  ink_assert(pd->empty());
-  int i = 0;
-  forl_LL(UnixUDPConnection, uc, udp_polling) {
-    if (uc->recvActive) {
-      pd = build_one_udpread_poll(uc->getFd(), uc, pd);
-      i++;
-    }
-  }
-  if (i > 500) {
-    Debug("udpnet-poll", "%d fds", i);
-  }
-  return pd;
-}
-
 int
 UDPNetHandler::mainNetEvent(int event, Event * e)
 {
@@ -1293,11 +1206,11 @@
   int i;
   int nread = 0;
 
-  struct epoll_data_ptr *temp_eptr = NULL;
+  EventIO *temp_eptr = NULL;
   for (i = 0; i < pc->pollDescriptor->result; i++) {
-    temp_eptr = (struct epoll_data_ptr *) get_ev_data(pc->pollDescriptor,i);
-    if ((get_ev_events(pc->pollDescriptor,i) & INK_EVP_IN)
-        && temp_eptr->type == EPOLL_UDP_CONNECTION) {
+    temp_eptr = (EventIO*) get_ev_data(pc->pollDescriptor,i);
+    if ((get_ev_events(pc->pollDescriptor,i) & EVENTIO_READ) 
+        && temp_eptr->type == EVENTIO_UDP_CONNECTION) {
       uc = temp_eptr->data.uc;
       ink_assert(uc && uc->mutex && uc->continuation);
       ink_assert(uc->refcount >= 1);
@@ -1459,44 +1372,20 @@
   // to call destroy(); the thread to which the UDPConnection will
   // remove the connection from a linked list and call delete.
 
-#if defined(USE_EPOLL)
-  struct epoll_event ev;
-#elif defined(USE_KQUEUE)
-  struct kevent ev;
-#else
-#error port me
-#endif
-  //changed by YTS Team, yamsat
   for (i = 0; i < numUdpPorts; i++) {
     udpConns[i]->bindToThread(cont);
-    //epoll changes
     pc = get_UDPPollCont(udpConns[i]->ethread);
-    udpConns[i]->ep.type = 5;             //UDP
-    udpConns[i]->ep.data.uc = udpConns[i];
-
-#if defined(USE_EPOLL)
-    memset(&ev, 0, sizeof(struct epoll_event));
-    ev.events = EPOLLIN | EPOLLET;
-    ev.data.ptr = &udpConns[i]->ep;
-    epoll_ctl(pc->pollDescriptor->epoll_fd, EPOLL_CTL_ADD, udpConns[i]->getFd(), &ev);
-#elif defined(USE_KQUEUE)
-    EV_SET(&ev, udpConns[i]->getFd(), EVFILT_READ, EV_ADD, 0, 0, &udpConns[i].ep);
-    kevent(pc->pollDescriptor->kqueue_fd, &ev, 1, NULL, 0, NULL);
-#else
-#error port me
-#endif
-    //epoll changes ends here
-  }                             //for
+    udpConns[i]->ep.start(pc->pollDescriptor, udpConns[i], EVENTIO_READ);
+  }
 
   resultCode = NET_EVENT_DATAGRAM_OPEN;
   goto out;
 
 Lerror:
   resultCode = NET_EVENT_DATAGRAM_ERROR;
-  for (i = 0; i < numUdpPorts; i++) {
+  for (i = 0; i < numUdpPorts; i++)
     delete udpConns[i];
-  }
-  delete[]udpConns;
+  delete[] udpConns;
   udpConns = NULL;
 
 out:

Modified: incubator/trafficserver/traffic/trunk/iocore/utils/MTInteractor.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/iocore/utils/MTInteractor.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/iocore/utils/MTInteractor.cc (original)
+++ incubator/trafficserver/traffic/trunk/iocore/utils/MTInteractor.cc Wed Feb 24 18:48:42 2010
@@ -24,6 +24,7 @@
 
 
 #include "I_MTInteractor.h"
+#include "P_EventSystem.h"
 
 // for debugging
 #define LOCK_FAIL_RATE 0.05

Modified: incubator/trafficserver/traffic/trunk/iocore/utils/OpQueue.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/iocore/utils/OpQueue.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/iocore/utils/OpQueue.cc (original)
+++ incubator/trafficserver/traffic/trunk/iocore/utils/OpQueue.cc Wed Feb 24 18:48:42 2010
@@ -23,7 +23,7 @@
 
 
 #include "I_OpQueue.h"
-#include "inktomi++.h"
+#include "P_EventSystem.h"
 ClassAllocator<Callback> cbAlloc("Callback", 16);
 
 #define CB_ALLOC(_a, _t) _a.alloc()

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Arena.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Arena.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Arena.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Arena.cc Wed Feb 24 18:48:42 2010
@@ -21,9 +21,9 @@
   limitations under the License.
  */
 
+#include "inktomi++.h"
 #include <assert.h>
 #include <string.h>
-#include "inktomi++.h"
 
 
 #define DEFAULT_ALLOC_SIZE   1024

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Compatability.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Compatability.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Compatability.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Compatability.h Wed Feb 24 18:48:42 2010
@@ -57,6 +57,8 @@
 #if (HOST_OS == linux)
 #define NEED_ALTZONE_DEFINED
 #define MAP_SHARED_MAP_NORESERVE (MAP_SHARED)
+#elif (HOST_OS == darwin)
+#define MAP_SHARED_MAP_NORESERVE (MAP_SHARED)
 #else
 #define MAP_SHARED_MAP_NORESERVE (MAP_SHARED | MAP_NORESERVE)
 #endif
@@ -75,9 +77,12 @@
 }
 #endif
 
-#if (HOST_OS == freebsd) || (HOST_OS == darwin)
+#if ((HOST_OS == freebsd) || (HOST_OS == darwin))
 typedef long paddr_t;
 typedef unsigned int in_addr_t;
+#elif (HOST_OS == solaris)
+#include <sys/types.h> /* paddr_t should be defined here*/
+typedef uint64_t  paddr_t;
 #endif
 
 #define NEED_HRTIME
@@ -113,10 +118,10 @@
 #include <sys/syscall.h>
 
 // Some ugliness around pread() vs SYS_pread64 syscall
-#if defined (SYS_pread64)
+#if !defined(SYS_pread) && defined (SYS_pread64)
 #  define SYS_pread SYS_pread64
 #endif
-#if defined (SYS_pwrite64)
+#if !defined(SYS_pwrite) && defined (SYS_pwrite64)
 #  define SYS_pwrite SYS_pwrite64
 #endif
 
@@ -243,6 +248,12 @@
 #define ink_mmap       mmap
 #define ink_sleep      sleep
 
+#if (__GNUC__ >= 3) && ((HOST_OS == darwin) || (HOST_OS == solaris))
+#define ink_offsetof(TYPE, MEMBER) (__builtin_offsetof (TYPE, MEMBER))
+#else
+#define ink_offsetof offsetof
+#endif
+
 #include "Resource.h"
 
 #endif

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Diags.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Diags.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Diags.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Diags.cc Wed Feb 24 18:48:42 2010
@@ -34,8 +34,8 @@
   
  ****************************************************************************/
 
+#include "ink_config.h"
 #include "ink_unused.h"
-
 #include "ink_error.h"
 #include "ink_assert.h"
 #include "ink_time.h"
@@ -51,6 +51,7 @@
 
 
 int diags_on_for_plugins = 0;
+bool DiagsConfigState::enabled[2] = { false, false };
 
 //////////////////////////////////////////////////////////////////////////////
 //

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Diags.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Diags.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Diags.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Diags.h Wed Feb 24 18:48:42 2010
@@ -48,47 +48,6 @@
 #define NO_DIAG 1
 #endif
 
-// eInsertStringType - defined in ink_error.h //
-//typedef enum
-//{
-//    keNo_OP = 0,
-//    keENCAPSULATED_STRING = 1,        
-//    keINSERT_STRING = 2
-//} eInsertStringType;
-
-//////////////////////////////////////////////////////////////////////////////
-//
-//      On Feb 10, 1998, Peter Mattis showed Diags overhead was non-existant
-//      when the run-time enable flag was turned off.  So, on this great and
-//      glorious date, run-time diags were incorporated into Traffic Server.
-//
-//      Date: Tue, 10 Feb 1998 19:52:25 -0800
-//      Subject: Re: ~5 ops/sec faster when statistics are turned off
-//
-//      (1) diags commented out
-//              40% hit-rate...372.85 ops/sec
-//      (2) diags in code, but enabled = 0
-//              40% hit-rate...375.72 ops/sec
-//      (3) diags in code, enabled = 1, but no tags match
-//              40% hit-rate...111.86 ops/sec
-//
-//      Looks like we're faster with diagnostics compiled in but
-//      turned off in records.config. :)  My runs are not long enough
-//      for the above numbers to be anything other than
-//      approximations.  But it does show that diagnostics cost
-//      basically nothing when not enabled.
-//
-//      Peter
-//
-//  On November 23, 1999, determined that the performance
-//  impact was insignificant only because of the heinously inefficient
-//  code written, and turned of Diags in the optimized 
-//  code.
-// 
-//
-//////////////////////////////////////////////////////////////////////////////
-
-
 class Diags;
 
 // extern int diags_on_for_plugins;
@@ -131,7 +90,8 @@
 
 struct DiagsConfigState
 {
-  bool enabled[2];              // one debug, one action
+  // this is static to eliminate many loads from the critical path
+  static bool enabled[2];                       // one debug, one action
   DiagsModeOutput outputs[DiagsLevel_Count];    // where each level prints
 };
 
@@ -346,7 +306,6 @@
 };
 
 
-// debug closures support debug tags
 class DiagsDClosure:public DiagsBaseClosure
 {
 public:
@@ -365,6 +324,7 @@
   void operator() (const char *tag, int show_loc, const char *format_string ...);
 };
 
+// debug closures support debug tags
 
 // error closures do not support debug tags
 class DiagsEClosure:public DiagsBaseClosure

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/DynArray.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/DynArray.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/DynArray.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/DynArray.h Wed Feb 24 18:48:42 2010
@@ -30,7 +30,7 @@
 
 template<class T> class DynArray {
 public:
-  DynArray(const T * val, intptr_t initial_size = 0);
+  DynArray(const T * val = 0, intptr_t initial_size = 0);
   ~DynArray();
 
 #ifndef __GNUC__
@@ -71,6 +71,7 @@
 
     resize(i);
   }
+
 }
 
 template<class T> inline DynArray<T>::~DynArray()
@@ -177,7 +178,8 @@
     }
 
     for (; i < new_size; i++) {
-      new_data[i] = (T) * default_val;
+      if (default_val)
+        new_data[i] = (T) * default_val;
     }
 
     if (data) {

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/HostLookup.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/HostLookup.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/HostLookup.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/HostLookup.cc Wed Feb 24 18:48:42 2010
@@ -504,7 +504,7 @@
 {
   int index;
   charIndex_el *current_el = s->cur_el;
-  int level = s->cur_level;
+  intptr_t level = s->cur_level;
   charIndexIterInternal stored_state;
   HostBranch *r = NULL;
   bool first_element;
@@ -840,8 +840,8 @@
   hostArrayIterState ha_iter;
 
   HostBranch *lower_branch;
-  int curIndex;
-  int i;                        // Loop var
+  intptr_t curIndex;
+  intptr_t i;                        // Loop var
 
   for (i = 0; i < hb->leaf_indexs.length(); i++) {
     curIndex = hb->leaf_indexs[i];
@@ -1127,8 +1127,8 @@
 bool
 HostLookup::MatchArray(HostLookupState * s, void **opaque_ptr, DynArray<int>&array, bool host_done)
 {
-  int index;
-  int i;
+  intptr_t index;
+  intptr_t i;
 
   for (i = s->array_index + 1; i < array.length(); i++) {
     index = array[i];

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/INK_MD5.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/INK_MD5.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/INK_MD5.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/INK_MD5.h Wed Feb 24 18:48:42 2010
@@ -34,7 +34,7 @@
 struct INK_MD5
 {
   inku64 b[2];
-    INK_MD5 & operator =(INK_MD5 & md5)
+  const INK_MD5 & operator =(const INK_MD5 & md5)
   {
     b[0] = md5.b[0];
     b[1] = md5.b[1];

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/InkTime.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/InkTime.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/InkTime.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/InkTime.cc Wed Feb 24 18:48:42 2010
@@ -30,9 +30,9 @@
   
  ****************************************************************************/
 
-#include "ink_unused.h"   /* MAGIC_EDITING_TAG */
-#include "ink_platform.h"
 #include "inktomi++.h"
+#include "ink_platform.h"
+#include "ink_unused.h"   /* MAGIC_EDITING_TAG */
 #include "InkTime.h"
 #include "ink_hrtime.h"
 

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/List.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/List.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/List.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/List.h Wed Feb 24 18:48:42 2010
@@ -60,6 +60,7 @@
 #include "ink_assert.h"
 #include "ink_queue.h"
 #include "ink_resource.h"
+#include "Compatability.h"
 
 //
 //      Link cell for singly-linked list of objects of type C.
@@ -102,7 +103,7 @@
   SLL() : head(NULL) {}
   SLL(C *c) : head(c) {}
 };
-#define SList(_c, _f)  SLL<_c, offsetof(_c, _f)>
+#define SList(_c, _f)  SLL<_c, ink_offsetof(_c, _f)>
 #define forl_LL(_c, _p, _l) for (_c *_p = (_l).head; _p; _p = (_l).next_link(_p))
 
 template<class C, int o> inline void 
@@ -179,7 +180,7 @@
 
   DLL() : head(NULL) {}
 };
-#define DList(_c, _f)  DLL<_c, offsetof(_c, _f)>
+#define DList(_c, _f)  DLL<_c, ink_offsetof(_c, _f)>
 
 template<class C, int o> inline void 
 DLL<C,o>::push(C *c, Link<C> &l)
@@ -332,7 +333,7 @@
   
   Queue() : tail(NULL) {}
 };
-#define Que(_c, _f) Queue<_c, offsetof(_c, _f)>
+#define Que(_c, _f) Queue<_c, ink_offsetof(_c, _f)>
 
 template <class C, int o> inline void 
 Queue<C, o>::push(C * c, Link<C> &l) {
@@ -593,7 +594,7 @@
     }
   }
 };
-#define SortableQue(_c, _l) SortableQueue<_c, offsetof(_c, _l)>
+#define SortableQue(_c, _l) SortableQueue<_c, ink_offsetof(_c, _l)>
 
 //////////////////////////////////////////////////////////////////////////////
 //
@@ -762,7 +763,7 @@
   AtomicSLL(C * c, SLink<C> *l);
 };
 
-#define ASLL(_c, _l) AtomicSLL<_c, offsetof(_c, _l)>
+#define ASLL(_c, _l) AtomicSLL<_c, ink_offsetof(_c, _l)>
 
 template<class C, int o> inline SLink<C> &AtomicSLL<C,o>::link(C * x, C * c, SLink<C> &cl) {
   return *(SLink<C> *)(((char *) x) + (((char *) &cl) - ((char *) c)));

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Makefile.am
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Makefile.am?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Makefile.am (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Makefile.am Wed Feb 24 18:48:42 2010
@@ -21,7 +21,8 @@
 TESTS = $(check_PROGRAMS)
 noinst_LIBRARIES = libinktomi++.a
 
-libinktomi___a_CCASFLAGS = -Wa,--32
+#libinktomi___a_CCASFLAGS = -Wa,--32
+libinktomi___a_CCASFLAGS = -Wa,-32
 libinktomi___a_SOURCES = \
   Allocator.cc \
   Allocator.h \
@@ -161,15 +162,15 @@
 mkdfa_SOURCES = mkdfa.c
 
 test_atomic_SOURCES = test_atomic.cc
-test_atomic_LDADD = libinktomi++.a @LIBTHREAD@ @LIBTCL@
+test_atomic_LDADD = libinktomi++.a @LIBTHREAD@ @LIBTCL@ @LIBICONV@
 test_atomic_LDFLAGS = @EXTRA_CXX_LDFLAGS@
 
 test_freelist_SOURCES = test_freelist.cc
-test_freelist_LDADD = libinktomi++.a @LIBTHREAD@ @LIBTCL@
+test_freelist_LDADD = libinktomi++.a @LIBTHREAD@ @LIBTCL@ @LIBICONV@
 test_freelist_LDFLAGS = @EXTRA_CXX_LDFLAGS@
 
 test_arena_SOURCES = test_arena.cc
-test_arena_LDADD = libinktomi++.a @LIBTHREAD@ @LIBTCL@
+test_arena_LDADD = libinktomi++.a @LIBTHREAD@ @LIBTCL@ @LIBICONV@
 test_arena_LDFLAGS = @EXTRA_CXX_LDFLAGS@
 
 CompileParseRules_SOURCES = CompileParseRules.cc

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Regex.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Regex.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Regex.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Regex.cc Wed Feb 24 18:48:42 2010
@@ -21,20 +21,10 @@
   limitations under the License.
  */
 
-#include <assert.h>
-#include <ctype.h>
+#include "inktomi++.h"
 #include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <unistd.h>
-
-#include "Compatability.h"
 #include "Bitops.h"
-#include "INK_MD5.h"
 #include "Regex.h"
-#include "Resource.h"
-#include "ink_assert.h"
 
 enum RENodeType
 {
@@ -109,7 +99,7 @@
 
 struct REState
 {
-  int id;
+  intptr_t id;
   int accept_num;
   bool marked;
   unsigned char cclass[33];
@@ -1263,7 +1253,7 @@
   }
   state->marked = true;
 
-  printf("%3d: ", state->id);
+  printf("%3d: ", (int)state->id);
   if (state->accept_num != -1) {
     printf("accept (%d)", state->accept_num);
   }
@@ -1273,7 +1263,7 @@
   while (t) {
     printf("     ");
     re_print_cclass(t->cclass);
-    printf(" --> %d\n", t->state->id);
+    printf(" --> %d\n", (int)t->state->id);
     t = t->next;
   }
 
@@ -1423,10 +1413,11 @@
   unsigned char *cclass;
   RENode **nodes;
   RENode **new_nodes;
-  int cur_state;
+  intptr_t cur_state;
   int nstates;
   int input;
-  int i, j;
+  int i;
+  intptr_t j;
 
   nstates = 1;
   cur_state = 0;
@@ -1601,8 +1592,10 @@
   RETransition *t;
   int *counts;
   int input;
-  int i, j;
-  int b, c;
+  intptr_t i;
+  int j;
+  intptr_t b;
+  int c;
 
   /* allocate the counts array */
   counts = NEW(new int[nstates]);

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Regex.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Regex.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Regex.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Regex.h Wed Feb 24 18:48:42 2010
@@ -21,8 +21,12 @@
   limitations under the License.
  */
 
-#ifndef __REGEX_H__
-#define __REGEX_H__
+#ifndef __TS_REGEX_H__
+#define __TS_REGEX_H__
+
+#if (HOST_OS == darwin) // FIXME: includes case sensitve(?)
+#include </usr/include/regex.h>
+#endif
 
 /*
   regular expression rules:
@@ -95,4 +99,4 @@
 };
 
 
-#endif /* __REGEX_H__ */
+#endif /* __TS_REGEX_H__ */

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Regression.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Regression.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Regression.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Regression.cc Wed Feb 24 18:48:42 2010
@@ -35,16 +35,12 @@
 static RegressionTest *test = NULL;
 static RegressionTest *exclusive_test = NULL;
 
-RegressionTest *
-  RegressionTest::current = 0;
-int
-  RegressionTest::ran_tests = 0;
-DFA
-  RegressionTest::dfa;
-int
-  regression_level = 0;
-int
-  RegressionTest::final_status = REGRESSION_TEST_PASSED;
+RegressionTest *RegressionTest::current = 0;
+int RegressionTest::ran_tests = 0;
+DFA RegressionTest::dfa;
+int regression_level = 0;
+int RegressionTest::final_status = REGRESSION_TEST_PASSED;
+
 char *
 regression_status_string(int status)
 {
@@ -55,7 +51,6 @@
 
 RegressionTest::RegressionTest(const char *name_arg, TestFunction * function_arg, int aopt)
 {
-  // printf("<%s>\n",name_arg);
   name = name_arg;
   function = function_arg;
   status = REGRESSION_TEST_NOT_RUN;
@@ -109,7 +104,6 @@
   return run_some();
 }
 
-
 int
 RegressionTest::run_some()
 {
@@ -123,7 +117,6 @@
               &SPACES[40 + strlen(current->name)], regression_status_string(current->status));
     }
     current = current->next;
-
   }
   for (; current; current = current->next) {
     if ((dfa.match(current->name) >= 0)) {
@@ -180,7 +173,7 @@
 }
 
 int
-rprintf(RegressionTest * t, const char *format, ...)
+rprintf(RegressionTest *t, const char *format, ...)
 {
   int l;
   char buffer[8192];
@@ -194,10 +187,21 @@
   return (l);
 }
 
+int
+rperf(RegressionTest *t, const char *tag, double val)
+{
+  int l;
+  char format2[8192];
+  l = snprintf(format2, sizeof(format2), "RPERF %s.%s %f\n", t->name, tag, val);
+  fputs(format2, stderr);
+  return (l);
+}
+
 REGRESSION_TEST(Regression) (RegressionTest * t, int atype, int *status) {
   (void) t;
   (void) atype;
   rprintf(t, "regression test\n");
+  rperf(t, "speed", 100.0);
   if (!test)
     *status = REGRESSION_TEST_FAILED;
   else

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/Regression.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/Regression.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/Regression.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/Regression.h Wed Feb 24 18:48:42 2010
@@ -21,38 +21,32 @@
   limitations under the License.
  */
 
-/****************************************************************************
-
-  Regression.h
-
-  
- ****************************************************************************/
-
 #ifndef _Regression_h
 #define _Regression_h
+
 #include "inktomi++.h"
 #include "Regex.h"
 
-// 
-//  Each module should provide one or more regression tests
+//   Each module should provide one or more regression tests
 //
-//  An example:
+//   An example:
 //
-// REGRESSION_TEST(Addition)(RegressionTest *t, int atype, int *pstatus) {
-//    if (1 + 1 != 2) 
-//      *pstatus = REGRESSION_TEST_FAILED;
-//    if (atype > REGRESSION_TEST_NIGHTLY)  // try again
-//      if (1 + 1 != 2) 
-//        *pstatus = REGRESSION_TEST_FAILED;
-//    rprintf(t, "it worked, 1+1 really is 2!");
-//    *pstatus return REGRESSION_TEST_PASSED;
-// }
-// 
-// 
+//   REGRESSION_TEST(Addition)(RegressionTest *t, int atype, int *pstatus) {
+//     if (atype < REGRESSION_TEST_NIGHTLY) { // to expensive to do more than nightly
+//       *pstatus = REGRESSION_TEST_NOT_RUN;
+//       return;
+//     }
+//     if (1 + 1 != 2) {
+//       rprintf(t, "drat, 1+1 isn't 2??");
+//       *pstatus = REGRESSION_TEST_FAILED;
+//     } else
+//       *pstatus = REGRESSION_TEST_PASSED;
+//   }
+
 
 // status values
 #define REGRESSION_TEST_PASSED         1
-#define REGRESSION_TEST_INPROGRESS     0
+#define REGRESSION_TEST_INPROGRESS     0 // initial value
 #define REGRESSION_TEST_FAILED         -1
 #define REGRESSION_TEST_NOT_RUN        -2
 
@@ -80,7 +74,7 @@
   int printed;
   int opt;
 
-    RegressionTest(const char *name_arg, TestFunction * function_arg, int aopt);
+  RegressionTest(const char *name_arg, TestFunction * function_arg, int aopt);
 
   static int final_status;
   static int ran_tests;
@@ -102,6 +96,7 @@
 void RegressionTest_##_f
 
 int rprintf(RegressionTest * t, const char *format, ...);
+int rperf(RegressionTest *t, const char *tag, double val);
 char *regression_status_string(int status);
 
 extern int regression_level;
@@ -113,5 +108,4 @@
   Warning(_buf);                                                        \
 }                                                                       \
 
-#define _Regression_h
 #endif /* _Regression_h */

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/SimpleDBM.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/SimpleDBM.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/SimpleDBM.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/SimpleDBM.cc Wed Feb 24 18:48:42 2010
@@ -37,6 +37,8 @@
   prevent multiple processes from accessing the same database.
 
 */
+#include "ink_config.h"
+
 #include "SimpleDBM.h"
 
 // sqlite3 prepared statement SQL. TODO: We might not be able to

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_bool.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_bool.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_bool.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_bool.h Wed Feb 24 18:48:42 2010
@@ -46,8 +46,10 @@
  * bool, true, and false already declared in C++
  */
 #if !defined (bool)
+#if (HOST_OS != freebsd) && (HOST_OS != solaris)
 #define bool int
 #endif
+#endif
 
 #if !defined (true)
 #define true 1

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_defs.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_defs.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_defs.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_defs.cc Wed Feb 24 18:48:42 2010
@@ -31,7 +31,7 @@
 #include "inktomi++.h"
 #include "ink_unused.h"
 #include "ink_platform.h"
-#if (HOST_OS == linux) || (HOST_OS == freebsd)
+#if (HOST_OS == linux) || (HOST_OS == freebsd) || (HOST_OS == darwin)
 #include <sys/types.h>
 #include <sys/param.h>
 #include <sys/sysctl.h>
@@ -49,16 +49,22 @@
 {
   *name = 0;
   *release = 0;
-#if (HOST_OS == freebsd)
+#if (HOST_OS == freebsd) || (HOST_OS == darwin)
   int mib[2];
+  size_t len = namelen;
   mib[0] = CTL_KERN;
   mib[1] = KERN_OSTYPE;
-  if (sysctl(mib, 2, name, (size_t *) & namelen, NULL, 0) == -1)
+
+  if (sysctl(mib, 2, name, &len, NULL, 0) == -1)
     return -1;
+
+  len = releaselen;
   mib[0] = CTL_KERN;
   mib[1] = KERN_OSRELEASE;
-  if (sysctl(mib, 2, release, (size_t *) & releaselen, NULL, 0) == -1)
+
+  if (sysctl(mib, 2, release, &len, NULL, 0) == -1)
     return -1;
+
   return 0;
 #elif (HOST_OS == linux)
   struct utsname buf;

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_defs.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_defs.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_defs.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_defs.h Wed Feb 24 18:48:42 2010
@@ -29,7 +29,9 @@
 #define SIZE(x) (sizeof(x)/sizeof((x)[0]))
 #define ON ((char*)&on)
 #define OFF ((char*)&off)
+#ifndef ABS
 #define ABS(_x_) (((_x_) < 0) ? ( - (_x_)) : (_x_))
+#endif
 
 /* Debugging
 */

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_error.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_error.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_error.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_error.cc Wed Feb 24 18:48:42 2010
@@ -22,8 +22,8 @@
 
  */
 
-#include "ink_error.h"
 #include "inktomi++.h"
+#include "ink_error.h"
 #include "ink_stack_trace.h"
 
 #include <syslog.h>

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_file.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_file.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_file.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_file.cc Wed Feb 24 18:48:42 2010
@@ -29,22 +29,7 @@
 
  ****************************************************************************/
 
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include "Compatability.h"
-#include "ink_time.h"
-
-#include <sys/file.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include "ink_error.h"
-#include "ink_file.h"
-#include "ink_port.h"
-#include "ink_unused.h"       /* MAGIC_EDITING_TAG */
+#include "inktomi++.h"
 
 DIR *
 ink_opendir(const char *path)

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_hrtime.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_hrtime.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_hrtime.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_hrtime.h Wed Feb 24 18:48:42 2010
@@ -31,6 +31,7 @@
 #if !defined (_ink_hrtime_h_)
 #define _ink_hrtime_h_
 
+#include "ink_config.h"
 #include "ink_assert.h"
 #include "Compatability.h"
 
@@ -48,11 +49,6 @@
 typedef hrtime_t ink_hrtime;
 #endif
 
-#if (HOST_OS == freebsd)
-#define NEED_HRTIME_BASIS
-#define USE_TIME_STAMP_COUNTER_HRTIME
-#endif
-
 
 //////////////////////////////////////////////////////////////////////////////
 //

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_inet.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_inet.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_inet.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_inet.cc Wed Feb 24 18:48:42 2010
@@ -21,12 +21,9 @@
   limitations under the License.
  */
 
-#include "ink_inet.h"
-#include "Compatability.h"
+#include "inktomi++.h"
 
-#include "ParseRules.h"
-
-#if (HOST_OS == freebsd) || (HOST_OS == darwin)
+#if (HOST_OS == darwin)
 extern "C"
 {
   struct hostent *gethostbyname_r(const char *name, struct hostent *result, char *buffer, int buflen, int *h_errnop);
@@ -77,10 +74,15 @@
   if (!res && addrp)
     r = addrp;
 #else
+#ifdef RENTRENT_GETHOSTBYADDR
+  struct hostent *r = gethostbyaddr((const void *) ip, len, type);
+
+#else
   struct hostent *r = gethostbyaddr_r((char *) ip, len, type, &data->ent,
                                       data->buf,
                                       INK_GETHOSTBYNAME_R_DATA_SIZE,
                                       &data->herrno);
+#endif
 #endif //LINUX
   return r;
 }

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_killall.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_killall.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_killall.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_killall.cc Wed Feb 24 18:48:42 2010
@@ -24,19 +24,9 @@
 /*-------------------------------------------------------------------------
   -------------------------------------------------------------------------*/
 
-#if (HOST_OS == linux)
+#include "inktomi++.h"
 
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <signal.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+#if (HOST_OS == linux)
 
 #include "ink_killall.h"
 #include "ink_resource.h"

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_killall.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_killall.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_killall.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_killall.h Wed Feb 24 18:48:42 2010
@@ -24,11 +24,14 @@
 /*-------------------------------------------------------------------------
   -------------------------------------------------------------------------*/
 
-#if (HOST_OS == linux)
 
 #ifndef _INK_KILLALL_H_
 #define _INK_KILLALL_H_
 
+#include "ink_config.h"
+
+#if (HOST_OS == linux)
+
 /*-------------------------------------------------------------------------
    ink_killall
    - Sends signal 'sig' to all processes with the name 'pname'

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_llqueue.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_llqueue.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_llqueue.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_llqueue.h Wed Feb 24 18:48:42 2010
@@ -45,7 +45,11 @@
   LLQrec * head, *tail, *free;
   unsigned long len, highwater;
     ink_mutex mux;
-    ink_sem sema;
+#if (HOST_OS == darwin)
+  ink_sem *sema;
+#else /* !darwin */
+  ink_sem sema;
+#endif /* !darwin */
 } LLQ;
 
 LLQ *create_queue(void);

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_memory.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_memory.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_memory.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_memory.cc Wed Feb 24 18:48:42 2010
@@ -29,6 +29,8 @@
  
  ****************************************************************************/
 
+#include "inktomi++.h"
+
 #include <assert.h>
 #if (HOST_OS == linux)
 #ifndef _XOPEN_SOURCE
@@ -41,7 +43,7 @@
 #ifdef HAVE_MALLOC_H
 #include <malloc.h>
 #endif
-#include "inktomi++.h"     /* MAGIC_EDITING_TAG */
+
 
 
 class MAMemChunk
@@ -79,7 +81,8 @@
   size = chunk_size * total_chunks;
 
   if (size > 0) {
-    if (!posix_memalign((void **) &heap, 8192, size)) {
+    heap = (char *)ink_memalign(8192, size);
+    if (heap != NULL) {
       for (int i = 0; i < total_chunks; i++) {
         MAMemChunk *mc = new MAMemChunk();
         mc->next = chunk_list_free;
@@ -296,7 +299,7 @@
 #endif
   return (ptr);
 #else
-#if (HOST_OS == freebsd)
+#if (HOST_OS == freebsd) || (HOST_OS == darwin)
   /*
    * DEC malloc calims to align for "any allocatable type",
    * and the following code checks that.

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_mutex.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_mutex.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_mutex.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_mutex.h Wed Feb 24 18:48:42 2010
@@ -71,13 +71,15 @@
 {
   (void) name;
 
+#if (HOST_OS == solaris)
+  if ( pthread_mutex_init(m, NULL) != 0 ) {
+    abort();
+  }
+#else
   if (pthread_mutex_init(m, &_g_mattr.attr) != 0) {
     abort();
   }
-//  if ( pthread_mutex_init(m, NULL) != 0 ) {
-//    abort();
-//  }
-
+#endif
   return 0;
 }
 

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_platform.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_platform.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_platform.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_platform.h Wed Feb 24 18:48:42 2010
@@ -81,6 +81,8 @@
 #include <sys/epoll.h>
 #elif defined(USE_KQUEUE)
 #include <sys/event.h>
+#elif defined(USE_PORT)
+#include <port.h>
 #endif
 
 
@@ -113,8 +115,20 @@
 #define __STDC__ 0
 #endif
 
+#ifdef HAVE_NETINET_IN_H
+  #include <netinet/in.h>
+#endif
+
 #ifdef HAVE_NETINET_IP_H
-#  include <netinet/ip.h>
+  #include <netinet/ip.h>
+#endif
+
+#ifdef HAVE_NETINET_IN_SYSTM_H
+  #include <netinet/in_systm.h>
+#endif
+
+#ifdef HAVE_NETINET_IP_ICMP_H
+  #include <netinet/ip_icmp.h>
 #endif
 
 #ifdef HAVE_MACHINE_ENDIAN_H
@@ -138,8 +152,6 @@
 #  include <sys/sockio.h>
 #endif
 
-#include <netinet/ip_icmp.h>
-
 #include <resolv.h>
 
 
@@ -151,9 +163,11 @@
 #  include <sys/sysinfo.h>
 #endif
 
+#if (HOST_OS != darwin)
 #ifdef HAVE_SYS_SYSCTL_H
 #  include <sys/sysctl.h>
 #endif
+#endif
 
 #ifdef HAVE_SYS_SYSTEMINFO_H
 #  include <sys/systeminfo.h>
@@ -161,10 +175,24 @@
 
 #include <dlfcn.h>
 
+#ifdef HAVE_ARPA_INET_H
+#  include <arpa/inet.h>
+#endif
+#ifdef HAVE_ARPA_NAMESER_H
+#  include <arpa/nameser.h>
+#endif
 #ifdef HAVE_ARPA_NAMESER_COMPAT_H
 #  include <arpa/nameser_compat.h>
 #endif
 
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
+
 #ifndef MAXINT
 #define MAXINT INT_MAX
 #endif

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_port.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_port.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_port.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_port.h Wed Feb 24 18:48:42 2010
@@ -45,6 +45,10 @@
 typedef unsigned long long inku64;
 typedef off_t ink_off_t;
 
+#define INKU64_MAX 18446744073709551615ULL
+#define INK64_MAX 9223372036854775807LL
+#define INK64_MIN (-INK64_MAX -1LL)
+
 /*******************************************************************
  ** x86
   ******************************************************************/
@@ -60,7 +64,7 @@
 #define _CRTIMP
 #define HAVE_64_BIT
 
-#if (HOST_OS == linux) || (HOST_OS == freebsd) || (HOST_OS == darwin)
+#if (HOST_OS == linux) || (HOST_OS == freebsd) || (HOST_OS == darwin) || (HOST_OS == solaris)
 #define POSIX_THREAD
 #define POSIX_THREAD_10031c
 #else
@@ -86,6 +90,12 @@
 #define MAXINT INT_MAX
 #endif
 
+#if (HOST_OS == darwin)
+#define NO_MEMALIGN
+#define RENTRENT_GETHOSTBYNAME
+#define RENTRENT_GETHOSTBYADDR
+#endif
+
 #define NUL '\0'
 
 // copy from ink_ntio.h

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_pread_linux.c
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_pread_linux.c?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_pread_linux.c (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_pread_linux.c Wed Feb 24 18:48:42 2010
@@ -21,6 +21,7 @@
   limitations under the License.
  */
 
+#include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_queue.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue.cc Wed Feb 24 18:48:42 2010
@@ -36,6 +36,7 @@
   
   ****************************************************************************/
 
+#include "ink_config.h"
 #include <assert.h>
 #include <memory.h>
 #include <stdlib.h>
@@ -76,7 +77,7 @@
 #define DEADBEEF
 #endif
 
-/* #define MEMPROTECT */
+// #define MEMPROTECT 1
 
 #define MEMPROTECT_SIZE  0x200
 
@@ -167,7 +168,6 @@
 #endif                          /* !INK_USE_MUTEX_FOR_FREELISTS */
 {                               //static inku32 cntf = 0;
 
-
 #if (defined(USE_SPINLOCK_FOR_FREELIST) || defined(CHECK_FOR_DOUBLE_FREE))
   void *foo;
   inku32 type_size = f->type_size;
@@ -321,10 +321,6 @@
     } else {
       SET_FREELIST_POINTER_VERSION(next, *ADDRESS_OF_NEXT(TO_PTR(FREELIST_POINTER(item)), f->offset),
                                    FREELIST_VERSION(item) + 1);
-#ifdef SANITY
-      if (item.s.pointer == TO_PTR(next.s.pointer))
-        ink_fatal(1, "ink_freelist_new: loop detected");
-#endif /* SANITY */
 #if !defined(INK_USE_MUTEX_FOR_FREELISTS)
       result = ink_atomic_cas64((ink64 *) & f->head.data, item.data, next.data);
 #else
@@ -334,7 +330,9 @@
 
 #ifdef SANITY
       if (result) {
-        if (((uintptr_t) (TO_PTR(next.s.pointer))) & 3)
+        if (FREELIST_POINTER(item) == TO_PTR(FREELIST_POINTER(next)))
+          ink_fatal(1, "ink_freelist_new: loop detected");
+        if (((uintptr_t) (TO_PTR(FREELIST_POINTER(next)))) & 3)
           ink_fatal(1, "ink_freelist_new: bad list");
         if (TO_PTR(FREELIST_POINTER(next)))
           fake_global_for_ink_queue = *(int *) TO_PTR(FREELIST_POINTER(next));
@@ -434,11 +432,7 @@
 #ifdef SANITY
     if (TO_PTR(FREELIST_POINTER(h)) == item)
       ink_fatal(1, "ink_freelist_free: trying to free item twice");
-#ifdef __alpha
-    if (((uintptr_t) (TO_PTR(h.data))) & 3)
-#else
-    if (((uintptr_t) (TO_PTR(h.s.pointer))) & 3)
-#endif
+    if (((uintptr_t) (TO_PTR(FREELIST_POINTER(h)))) & 3)
       ink_fatal(1, "ink_freelist_free: bad list");
     if (TO_PTR(FREELIST_POINTER(h)))
       fake_global_for_ink_queue = *(int *) TO_PTR(FREELIST_POINTER(h));

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_queue.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue.h Wed Feb 24 18:48:42 2010
@@ -71,11 +71,13 @@
 
   typedef union
   {
+#if defined(__i386__)
     struct
     {
       void *pointer;
       ink32 version;
     } s;
+#endif
     ink64 data;
   } head_p;
 
@@ -99,7 +101,7 @@
 #define TO_PTR(_x) ((void*)(_x))
 #endif
 
-#if defined(__i386__)
+#if defined(__i386__) || defined(__i386)
 #define FREELIST_POINTER(_x) (_x).s.pointer
 #define FREELIST_VERSION(_x) (_x).s.version
 #define SET_FREELIST_POINTER_VERSION(_x,_p,_v) \

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue_utils.c
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_queue_utils.c?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue_utils.c (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_queue_utils.c Wed Feb 24 18:48:42 2010
@@ -21,6 +21,7 @@
   limitations under the License.
  */
 
+#include "ink_config.h"
 #include <assert.h>
 
 #include "ink_atomic.h"
@@ -68,9 +69,13 @@
 void
 ink_queue_load_64(void *dst, void *src)
 {
+#if defined(__i386__)
   ink32 src_version = (*(head_p *) src).s.version;
   void *src_pointer = (*(head_p *) src).s.pointer;
 
   (*(head_p *) dst).s.version = src_version;
   (*(head_p *) dst).s.pointer = src_pointer;
+#else
+  *(void**)dst = *(void**)src;
+#endif
 }

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_regex-3.6.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_regex-3.6.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_regex-3.6.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_regex-3.6.h Wed Feb 24 18:48:42 2010
@@ -21,9 +21,9 @@
   limitations under the License.
  */
 
-#if (HOST_OS != linux)
-#ifndef _REGEX_H_
-#define	_REGEX_H_               /* never again */
+#if (HOST_OS != linux) && (HOST_OS != freebsd) && (HOST_OS != darwin) && (HOST_OS != solaris)
+#ifndef _INK_REGEX_H_
+#define	_INK_REGEX_H_               /* never again */
 /* ========= begin header generated by ./mkh ========= */
 #ifdef __cplusplus
 extern "C"
@@ -98,7 +98,7 @@
 }
 #endif
 /* ========= end header generated by ./mkh ========= */
-#endif                          /* #ifndef _REGEX_H_ */
-#else
+#endif                          /* #ifndef _INK_REGEX_H_ */
+#else /* linux || freebsd || darwin || solaris */
 #include "regex.h"
-#endif  // not linux
+#endif  /* (HOST_OS != linux) && (HOST_OS != freebsd) && (HOST_OS != darwin) && (HOST_OS != solaris) */

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_res_init.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_res_init.cc Wed Feb 24 18:48:42 2010
@@ -96,6 +96,9 @@
 
 #endif /* LIBC_SCCS and not lint */
 
+#include "ink_config.h"
+#include "ink_platform.h"
+
 #include <sys/types.h>
 #include <sys/param.h>
 #include <sys/socket.h>
@@ -103,14 +106,17 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <arpa/nameser.h>
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H
+#include <arpa/nameser_compat.h>
+#endif
 #include <stdio.h>
 #include <ctype.h>
 #include <resolv.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
-#include "ink_string.h"
 
+#include "ink_string.h"
 #include "ink_resolver.h"
 
 #if (HOST_OS != linux)

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_res_mkquery.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_res_mkquery.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_res_mkquery.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_res_mkquery.cc Wed Feb 24 18:48:42 2010
@@ -97,11 +97,15 @@
 static const char rcsid[] = "$Id: res_mkquery.c,v 1.6.672.1 2008/04/03 02:12:21 marka Exp $";
 #endif /* LIBC_SCCS and not lint */
 
+#include "ink_config.h"
 
 #include <sys/types.h>
 #include <sys/param.h>
 #include <netinet/in.h>
 #include <arpa/nameser.h>
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H
+#include <arpa/nameser_compat.h>
+#endif
 #include <netdb.h>
 #include <resolv.h>
 #include <stdio.h>

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_resolver.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_resolver.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_resolver.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_resolver.h Wed Feb 24 18:48:42 2010
@@ -76,6 +76,9 @@
 #include "ink_platform.h"
 #include <resolv.h>
 #include <arpa/nameser.h>
+#ifdef HAVE_NET_PPP_DEFS_H
+#include <net/ppp_defs.h>
+#endif
 
 #define INK_RES_F_VC        0x00000001      /*%< socket is TCP */
 #define INK_RES_F_CONN      0x00000002      /*%< socket is connected */

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_rwlock.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_rwlock.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_rwlock.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_rwlock.cc Wed Feb 24 18:48:42 2010
@@ -21,6 +21,7 @@
   limitations under the License.
  */
 
+#include "ink_config.h"
 #include "ink_rwlock.h"
 
 //-------------------------------------------------------------------------

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_snprintf.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_snprintf.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_snprintf.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_snprintf.cc Wed Feb 24 18:48:42 2010
@@ -21,6 +21,8 @@
   limitations under the License.
  */
 
+#include "ink_config.h"
+
 /* varargs declarations: */
 # include <stdarg.h>
 # define VA_START(f)     va_start(ap, f)

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_sock.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_sock.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_sock.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_sock.cc Wed Feb 24 18:48:42 2010
@@ -27,7 +27,6 @@
   
 
 ***************************************************************************/
-#include "ink_platform.h"
 #include "inktomi++.h"
 
 #include "ink_unused.h"      /* MAGIC_EDITING_TAG */

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_stack_trace.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_stack_trace.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_stack_trace.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_stack_trace.cc Wed Feb 24 18:48:42 2010
@@ -21,12 +21,13 @@
   limitations under the License.
  */
 
+#include "inktomi++.h"
+#include "ink_stack_trace.h"
+
 #include <strings.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include "inktomi++.h"
-#include "ink_stack_trace.h"
 
 #ifdef HAVE_EXECINFO_H
 

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_string.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_string.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_string.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_string.cc Wed Feb 24 18:48:42 2010
@@ -29,12 +29,13 @@
  
  ****************************************************************************/
 
+#include "inktomi++.h"   /* MAGIC_EDITING_TAG */
+
 #include <assert.h>
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "inktomi++.h"   /* MAGIC_EDITING_TAG */
 
 #define INK_MAX_STRING_ARRAY_SIZE 128
 
@@ -424,10 +425,15 @@
 
   inbytesleft = inlen;
   outbytesleft = *outlen;
-  if (iconv(ic, (char **) &in, &inbytesleft, &out, &outbytesleft) == (size_t) - 1) {
-    iconv_close(ic);
-    goto strip;
-  }
+#if (HOST_OS == freebsd) || (HOST_OS == solaris)
+  if (iconv(ic, &in, &inbytesleft, &out, &outbytesleft) == (size_t) - 1) 
+#else
+  if (iconv(ic, (char **) &in, &inbytesleft, &out, &outbytesleft) == (size_t) - 1) 
+#endif
+    {
+      iconv_close(ic);
+      goto strip;
+    }
 
   *outlen -= outbytesleft;
   iconv_close(ic);

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_thread.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_thread.h?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_thread.h (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_thread.h Wed Feb 24 18:48:42 2010
@@ -225,6 +225,29 @@
   ink_assert(!sem_destroy(sp));
 }
 
+#if (HOST_OS == darwin)
+static inline ink_sem * 
+ink_sem_open(const char *name , int oflag, mode_t mode, unsigned int value)
+{
+  ink_sem *sptr;
+  sptr = sem_open(name, oflag, mode, value);
+  ink_assert(sptr != SEM_FAILED);
+  return sptr;
+}
+
+static inline void
+ink_sem_close(ink_sem * sp)
+{
+  ink_assert(!sem_close(sp));
+}
+
+static inline int
+ink_sem_unlink(const char *name)
+{
+  return sem_unlink(name);
+}
+#endif /* darwin */
+
 /*******************************************************************
  * Posix Condition Variables
  ******************************************************************/
@@ -251,7 +274,11 @@
 {
   int err;
   while (EINTR == (err = pthread_cond_timedwait(cp, mp, t)));
+#if (HOST_OS == freebsd)
+  ink_assert((err == 0) || (err == ETIMEDOUT));
+#else
   ink_assert((err == 0) || (err == ETIME) || (err == ETIMEDOUT));
+#endif
   return err;
 }
 
@@ -279,11 +306,13 @@
   pthread_exit(status);
 }
 
+#if defined(USE_OLD_EVENTFD)
 static inline void
 ink_create_pipe( int pfd[2])
 {
   ink_assert(pipe(pfd)==0);
 }
+#endif
 
 #endif /* #if defined(POSIX_THREAD) */
 

Modified: incubator/trafficserver/traffic/trunk/libinktomi++/ink_time.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_time.cc?rev=915922&r1=915921&r2=915922&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/libinktomi++/ink_time.cc (original)
+++ incubator/trafficserver/traffic/trunk/libinktomi++/ink_time.cc Wed Feb 24 18:48:42 2010
@@ -31,6 +31,7 @@
 
  ****************************************************************************/
 
+#include "ink_config.h"
 #include "ink_time.h"
 #include "ink_assert.h"
 #include "ink_port.h"