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"