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 *