This is an automated email from the ASF dual-hosted git repository. oknet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push: new 4df19d2 Optimize: define UnixUDPConnection::inQueue by ASLL macro 4df19d2 is described below commit 4df19d22fa7f9fbd9866684cf2e09a8975d2d704 Author: Oknet Xu <xuc...@skyguard.com.cn> AuthorDate: Fri Oct 27 14:30:11 2017 +0800 Optimize: define UnixUDPConnection::inQueue by ASLL macro --- iocore/net/P_UnixUDPConnection.h | 7 ++----- iocore/net/UnixUDPConnection.cc | 45 +++++++++++++++++----------------------- iocore/net/UnixUDPNet.cc | 2 +- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/iocore/net/P_UnixUDPConnection.h b/iocore/net/P_UnixUDPConnection.h index 6c71d46..29b6d82 100644 --- a/iocore/net/P_UnixUDPConnection.h +++ b/iocore/net/P_UnixUDPConnection.h @@ -46,7 +46,8 @@ public: LINK(UnixUDPConnection, callback_link); SLINK(UnixUDPConnection, newconn_alink); - InkAtomicList inQueue; + // Incoming UDP Packet Queue + ASLL(UDPPacketInternal, alink) inQueue; int onCallbackQueue; Action *callbackAction; EThread *ethread; @@ -64,8 +65,6 @@ TS_INLINE UnixUDPConnection::UnixUDPConnection(int the_fd) : onCallbackQueue(0), callbackAction(nullptr), ethread(nullptr), m_errno(0) { fd = the_fd; - UDPPacketInternal p; - ink_atomiclist_init(&inQueue, "Incoming UDP Packet queue", (char *)&p.alink.next - (char *)&p); SET_HANDLER(&UnixUDPConnection::callbackHandler); } @@ -78,8 +77,6 @@ UnixUDPConnection::init(int the_fd) ethread = nullptr; m_errno = 0; - UDPPacketInternal p; - ink_atomiclist_init(&inQueue, "Incoming UDP Packet queue", (char *)&p.alink.next - (char *)&p); SET_HANDLER(&UnixUDPConnection::callbackHandler); } diff --git a/iocore/net/UnixUDPConnection.cc b/iocore/net/UnixUDPConnection.cc index bc5ee95..d372e07 100644 --- a/iocore/net/UnixUDPConnection.cc +++ b/iocore/net/UnixUDPConnection.cc @@ -34,20 +34,16 @@ UnixUDPConnection::~UnixUDPConnection() { - UDPPacketInternal *p = (UDPPacketInternal *)ink_atomiclist_popall(&inQueue); + UDPPacketInternal *p = nullptr; + + SList(UDPPacketInternal, alink) aq(inQueue.popall()); if (!tobedestroyed) { tobedestroyed = 1; } - if (p) { - UDPPacketInternal *pnext = nullptr; - while (p) { - pnext = p->alink.next; - p->alink.next = nullptr; - p->free(); - p = pnext; - } + while ((p = aq.pop())) { + p->free(); } if (callbackAction) { callbackAction->cancel(); @@ -80,23 +76,20 @@ UnixUDPConnection::callbackHandler(int event, void *data) Release(); return EVENT_CONT; } else { - UDPPacketInternal *p = (UDPPacketInternal *)ink_atomiclist_popall(&inQueue); - if (p) { - Debug("udpnet", "UDPConnection::callbackHandler"); - UDPPacketInternal *pnext = nullptr; - Queue<UDPPacketInternal> result; - while (p) { - pnext = p->alink.next; - p->alink.next = nullptr; - result.push(p); - p = pnext; - } - if (!shouldDestroy()) { - continuation->handleEvent(NET_EVENT_DATAGRAM_READ_READY, &result); - } else { - while ((p = result.dequeue())) { - p->free(); - } + UDPPacketInternal *p = nullptr; + SList(UDPPacketInternal, alink) aq(inQueue.popall()); + + Debug("udpnet", "UDPConnection::callbackHandler"); + Queue<UDPPacketInternal> result; + while ((p = aq.pop())) { + result.push(p); + } + + if (!shouldDestroy()) { + continuation->handleEvent(NET_EVENT_DATAGRAM_READ_READY, &result); + } else { + while ((p = result.dequeue())) { + p->free(); } } } diff --git a/iocore/net/UnixUDPNet.cc b/iocore/net/UnixUDPNet.cc index fb40bd4..fdd4076 100644 --- a/iocore/net/UnixUDPNet.cc +++ b/iocore/net/UnixUDPNet.cc @@ -128,7 +128,7 @@ UDPNetProcessorInternal::udp_read_from_net(UDPNetHandler *nh, UDPConnection *xuc UDPPacket *p = new_incoming_UDPPacket(ats_ip_sa_cast(&fromaddr), buf, r); p->setConnection(uc); // queue onto the UDPConnection - ink_atomiclist_push(&uc->inQueue, p); + uc->inQueue.push((UDPPacketInternal *)p); iters++; } while (r > 0); if (iters >= 1) { -- To stop receiving notification emails like this one, please contact ['"commits@trafficserver.apache.org" <commits@trafficserver.apache.org>'].