You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2010/10/26 21:49:50 UTC
svn commit: r1027711 - in /trafficserver/traffic/trunk/iocore/net:
P_NetAccept.h P_SSLNetAccept.h P_SSLNetProcessor.h P_UnixNetProcessor.h
SSLNetVConnection.cc SSLUnixNet.cc UnixNetAccept.cc UnixNetProcessor.cc
Author: zwoop
Date: Tue Oct 26 19:49:50 2010
New Revision: 1027711
URL: http://svn.apache.org/viewvc?rev=1027711&view=rev
Log:
TS-496 Fixes for SSL and the memory "leak" fixes (class allocator).
Modified:
trafficserver/traffic/trunk/iocore/net/P_NetAccept.h
trafficserver/traffic/trunk/iocore/net/P_SSLNetAccept.h
trafficserver/traffic/trunk/iocore/net/P_SSLNetProcessor.h
trafficserver/traffic/trunk/iocore/net/P_UnixNetProcessor.h
trafficserver/traffic/trunk/iocore/net/SSLNetVConnection.cc
trafficserver/traffic/trunk/iocore/net/SSLUnixNet.cc
trafficserver/traffic/trunk/iocore/net/UnixNetAccept.cc
trafficserver/traffic/trunk/iocore/net/UnixNetProcessor.cc
Modified: trafficserver/traffic/trunk/iocore/net/P_NetAccept.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/P_NetAccept.h?rev=1027711&r1=1027710&r2=1027711&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/P_NetAccept.h (original)
+++ trafficserver/traffic/trunk/iocore/net/P_NetAccept.h Tue Oct 26 19:49:50 2010
@@ -102,8 +102,9 @@ struct NetAccept:public Continuation
// Functions all THREAD_FREE and THREAD_ALLOC to be performed
// for both SSL and regular NetVConnection transparent to
// accept functions.
- virtual UnixNetVConnection *allocateThread(EThread * t);
- virtual void freeThread(UnixNetVConnection * vc, EThread * t);
+ virtual UnixNetVConnection *allocateThread(EThread *t);
+ virtual void freeThread(UnixNetVConnection *vc, EThread *t);
+ virtual UnixNetVConnection *allocateGlobal();
virtual EventType getEtype();
void init_accept_loop();
Modified: trafficserver/traffic/trunk/iocore/net/P_SSLNetAccept.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/P_SSLNetAccept.h?rev=1027711&r1=1027710&r2=1027711&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/P_SSLNetAccept.h (original)
+++ trafficserver/traffic/trunk/iocore/net/P_SSLNetAccept.h Tue Oct 26 19:49:50 2010
@@ -56,16 +56,16 @@ struct SSLNetAccept: public NetAccept
#ifndef _IOCORE_WIN32_WINNT
virtual UnixNetVConnection *allocateThread(EThread * t);
virtual void freeThread(UnixNetVConnection * vc, EThread * t);
+ virtual UnixNetVConnection *allocateGlobal();
virtual EventType getEtype();
#endif
virtual void init_accept_per_thread();
- SSLNetAccept()
- {
- };
+ SSLNetAccept()
+ { };
- virtual ~ SSLNetAccept() {
- };
+ virtual ~SSLNetAccept()
+ { };
};
#endif
Modified: trafficserver/traffic/trunk/iocore/net/P_SSLNetProcessor.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/P_SSLNetProcessor.h?rev=1027711&r1=1027710&r2=1027711&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/P_SSLNetProcessor.h (original)
+++ trafficserver/traffic/trunk/iocore/net/P_SSLNetProcessor.h Tue Oct 26 19:49:50 2010
@@ -104,7 +104,7 @@ SSLNetProcessor():UnixNetProcessor(), ve
// netProcessor connect functions.
virtual UnixNetVConnection *allocateThread(EThread * t);
virtual void freeThread(UnixNetVConnection * vc, EThread * t);
- virtual NetAccept *createNetAccept();
+virtual NetAccept *createNetAccept();
#else // #if defined (_IOCORE_WIN32)
public:
Modified: trafficserver/traffic/trunk/iocore/net/P_UnixNetProcessor.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/P_UnixNetProcessor.h?rev=1027711&r1=1027710&r2=1027711&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/P_UnixNetProcessor.h (original)
+++ trafficserver/traffic/trunk/iocore/net/P_UnixNetProcessor.h Tue Oct 26 19:49:50 2010
@@ -65,9 +65,7 @@ public:
// Functions all THREAD_FREE and THREAD_ALLOC to be performed
// for both SSL and regular NetVConnection transparent to
// netProcessor connect functions.
-
virtual UnixNetVConnection *allocateThread(EThread * t);
-
virtual void freeThread(UnixNetVConnection * vc, EThread * t);
virtual NetAccept *createNetAccept();
Modified: trafficserver/traffic/trunk/iocore/net/SSLNetVConnection.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/SSLNetVConnection.cc?rev=1027711&r1=1027710&r2=1027711&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/SSLNetVConnection.cc (original)
+++ trafficserver/traffic/trunk/iocore/net/SSLNetVConnection.cc Tue Oct 26 19:49:50 2010
@@ -431,7 +431,12 @@ SSLNetVConnection::free(EThread * t) {
}
sslHandShakeComplete = 0;
sslClientConnection = 0;
- THREAD_FREE(this, sslNetVCAllocator, t);
+
+ if (from_accept_thread) {
+ sslNetVCAllocator.free(this);
+ } else {
+ THREAD_FREE(this, sslNetVCAllocator, t);
+ }
}
int
Modified: trafficserver/traffic/trunk/iocore/net/SSLUnixNet.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/SSLUnixNet.cc?rev=1027711&r1=1027710&r2=1027711&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/SSLUnixNet.cc (original)
+++ trafficserver/traffic/trunk/iocore/net/SSLUnixNet.cc Tue Oct 26 19:49:50 2010
@@ -103,9 +103,17 @@ SSLNetAccept::allocateThread(EThread * t
void
SSLNetAccept::freeThread(UnixNetVConnection * vc, EThread * t)
{
+ ink_assert(!vc->from_accept_thread);
THREAD_FREE((SSLNetVConnection *) vc, sslNetVCAllocator, t);
}
+// This allocates directly on the class allocator, used for accept threads.
+UnixNetVConnection *
+SSLNetAccept::allocateGlobal()
+{
+ return (UnixNetVConnection *)sslNetVCAllocator.alloc();
+}
+
// Functions all THREAD_FREE and THREAD_ALLOC to be performed
// for both SSL and regular NetVConnection transparent to
// netProcessor connect functions. Yes it looks goofy to
@@ -120,6 +128,7 @@ SSLNetProcessor::allocateThread(EThread
void
SSLNetProcessor::freeThread(UnixNetVConnection * vc, EThread * t)
{
+ ink_assert(!vc->from_accept_thread);
THREAD_FREE((SSLNetVConnection *) vc, sslNetVCAllocator, t);
}
Modified: trafficserver/traffic/trunk/iocore/net/UnixNetAccept.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/UnixNetAccept.cc?rev=1027711&r1=1027710&r2=1027711&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/UnixNetAccept.cc (original)
+++ trafficserver/traffic/trunk/iocore/net/UnixNetAccept.cc Tue Oct 26 19:49:50 2010
@@ -180,6 +180,12 @@ NetAccept::freeThread(UnixNetVConnection
THREAD_FREE(vc, netVCAllocator, t);
}
+// This allocates directly on the class allocator, used for accept threads.
+UnixNetVConnection *
+NetAccept::allocateGlobal()
+{
+ return (UnixNetVConnection *)netVCAllocator.alloc();
+}
// Virtual function allows the correct
// etype to be used in NetAccept functions (ET_SSL
@@ -300,7 +306,8 @@ NetAccept::do_blocking_accept(NetAccept
do {
vc = (UnixNetVConnection *) master_na->alloc_cache;
if (likely(!vc)) {
- vc = (UnixNetVConnection *)netVCAllocator.alloc(); // Don't use thread / proxy allocation
+ //vc = allocateThread(t);
+ vc = allocateGlobal(); // Bypass proxy / thread allocator
vc->from_accept_thread = true;
vc->id = net_next_connection_number();
master_na->alloc_cache = vc;
Modified: trafficserver/traffic/trunk/iocore/net/UnixNetProcessor.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/UnixNetProcessor.cc?rev=1027711&r1=1027710&r2=1027711&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/UnixNetProcessor.cc (original)
+++ trafficserver/traffic/trunk/iocore/net/UnixNetProcessor.cc Tue Oct 26 19:49:50 2010
@@ -195,10 +195,10 @@ Action *
UnixNetProcessor::connect_re_internal(Continuation * cont,
unsigned int ip, int port, NetVCOptions * opt)
{
-
ProxyMutex *mutex = cont->mutex;
EThread *t = mutex->thread_holding;
UnixNetVConnection *vc = allocateThread(t);
+
if (opt)
vc->options = *opt;
else
@@ -477,10 +477,10 @@ UnixNetProcessor::allocateThread(EThread
void
UnixNetProcessor::freeThread(UnixNetVConnection * vc, EThread * t)
{
+ ink_assert(!vc->from_accept_thread);
THREAD_FREE(vc, netVCAllocator, t);
}
-
// Virtual function allows creation of an
// SSLNetAccept or NetAccept transparent to NetProcessor.
NetAccept *