You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ig...@apache.org on 2011/07/15 01:34:02 UTC

svn commit: r1146921 - in /trafficserver/traffic/branches/3.0.x: ./ CHANGES STATUS iocore/hostdb/HostDB.cc iocore/net/P_UnixNet.h iocore/net/P_UnixNetVConnection.h iocore/net/UnixNet.cc iocore/net/UnixNetVConnection.cc

Author: igalic
Date: Thu Jul 14 23:34:01 2011
New Revision: 1146921

URL: http://svn.apache.org/viewvc?rev=1146921&view=rev
Log:
Backport [TS-834]

Modified:
    trafficserver/traffic/branches/3.0.x/   (props changed)
    trafficserver/traffic/branches/3.0.x/CHANGES
    trafficserver/traffic/branches/3.0.x/STATUS
    trafficserver/traffic/branches/3.0.x/iocore/hostdb/HostDB.cc
    trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNet.h
    trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNetVConnection.h
    trafficserver/traffic/branches/3.0.x/iocore/net/UnixNet.cc
    trafficserver/traffic/branches/3.0.x/iocore/net/UnixNetVConnection.cc

Propchange: trafficserver/traffic/branches/3.0.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 14 23:34:01 2011
@@ -1,4 +1,4 @@
 /incubator/trafficserver/traffic/branches/dev:891823-915885
 /trafficserver/traffic/branches/ts-291:965529-991993
 /trafficserver/traffic/branches/wccp:1021790-1040544
-/trafficserver/traffic/trunk:1129268,1131080,1131473,1133066,1133071,1133639,1135769-1135770,1137111,1137775,1137844,1137846,1144096,1144746
+/trafficserver/traffic/trunk:1129268,1131080,1131473,1133066,1133071,1133639,1135769-1135770,1137111,1137775,1137844,1137846,1144094,1144096,1144746

Modified: trafficserver/traffic/branches/3.0.x/CHANGES
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/CHANGES?rev=1146921&r1=1146920&r2=1146921&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/CHANGES (original)
+++ trafficserver/traffic/branches/3.0.x/CHANGES Thu Jul 14 23:34:01 2011
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 
 Changes with Apache Traffic Server 3.0.1
+  *)i [TS-834] InactivityCop::check_inactivity crash
+
   *) [TS-826] TSHttpTxnErrorBodySet() can leak memory.
     Author: William Bardwell 
 

Modified: trafficserver/traffic/branches/3.0.x/STATUS
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/STATUS?rev=1146921&r1=1146920&r2=1146921&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/STATUS (original)
+++ trafficserver/traffic/branches/3.0.x/STATUS Thu Jul 14 23:34:01 2011
@@ -56,11 +56,6 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK:
     Jira: https://issues.apache.org/jira/browse/TS-860
     +1: zwoop, igalic
 
-  * Management: cop Crash, InactivityCop::check_inactivity, event=2, UnixNet.cc:57
-    Trunk patch: http://svn.apache.org/viewvc?rev=1144094&view=rev
-    Jira: https://issues.apache.org/jira/browse/TS-834
-    +1: zym, zwoop, jesus
-
   * API: TSFetchRestpGet(), TSFetchPageResptGet() and TSFetchUrl() have
          incorrect asserts.
     Trunk patch: http://svn.apache.org/viewvc?rev=1146414&view=rev

Modified: trafficserver/traffic/branches/3.0.x/iocore/hostdb/HostDB.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/iocore/hostdb/HostDB.cc?rev=1146921&r1=1146920&r2=1146921&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/iocore/hostdb/HostDB.cc (original)
+++ trafficserver/traffic/branches/3.0.x/iocore/hostdb/HostDB.cc Thu Jul 14 23:34:01 2011
@@ -1238,7 +1238,7 @@ HostDBContinuation::dnsPendingEvent(int 
     // we timed out, return a failure to the user
     MUTEX_TRY_LOCK_FOR(lock, action.mutex, ((Event *) e)->ethread, action.continuation);
     if (!lock) {
-      ((Event *) e)->schedule_in(HOST_DB_RETRY_PERIOD);
+      timeout = eventProcessor.schedule_in(this, HOST_DB_RETRY_PERIOD);
       return EVENT_CONT;
     }
     if (!action.cancelled && action.continuation)

Modified: trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNet.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNet.h?rev=1146921&r1=1146920&r2=1146921&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNet.h (original)
+++ trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNet.h Thu Jul 14 23:34:01 2011
@@ -246,6 +246,7 @@ public:
   QueM(UnixNetVConnection, NetState, read, ready_link) read_ready_list;
   QueM(UnixNetVConnection, NetState, write, ready_link) write_ready_list;
   Que(UnixNetVConnection, link) open_list;
+  DList(UnixNetVConnection, cop_link) cop_list;
   ASLLM(UnixNetVConnection, NetState, read, enable_link) read_enable_list;
   ASLLM(UnixNetVConnection, NetState, write, enable_link) write_enable_list;
 
@@ -457,9 +458,8 @@ read_disable(NetHandler * nh, UnixNetVCo
     }
   }
 #else
-  if (vc->next_inactivity_timeout_at)
-    if (!vc->write.enabled)
-      vc->next_inactivity_timeout_at = 0;
+  if (!vc->write.enabled)
+    vc->next_inactivity_timeout_at = 0;
 #endif
   vc->read.enabled = 0;
   nh->read_ready_list.remove(vc);
@@ -477,9 +477,8 @@ write_disable(NetHandler * nh, UnixNetVC
     }
   }
 #else
-  if (vc->next_inactivity_timeout_at)
-    if (!vc->read.enabled)
-      vc->next_inactivity_timeout_at = 0;
+  if (!vc->read.enabled)
+    vc->next_inactivity_timeout_at = 0;
 #endif
   vc->write.enabled = 0;
   nh->write_ready_list.remove(vc);

Modified: trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNetVConnection.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNetVConnection.h?rev=1146921&r1=1146920&r2=1146921&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNetVConnection.h (original)
+++ trafficserver/traffic/branches/3.0.x/iocore/net/P_UnixNetVConnection.h Thu Jul 14 23:34:01 2011
@@ -188,6 +188,7 @@ public:
   NetState read;
   NetState write;
 
+  LINK(UnixNetVConnection, cop_link);
   LINKM(UnixNetVConnection, read, ready_link)
   SLINKM(UnixNetVConnection, read, enable_link)
   LINKM(UnixNetVConnection, write, ready_link)

Modified: trafficserver/traffic/branches/3.0.x/iocore/net/UnixNet.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/iocore/net/UnixNet.cc?rev=1146921&r1=1146920&r2=1146921&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/iocore/net/UnixNet.cc (original)
+++ trafficserver/traffic/branches/3.0.x/iocore/net/UnixNet.cc Thu Jul 14 23:34:01 2011
@@ -39,61 +39,53 @@ extern "C" void fd_reify(struct ev_loop 
 // INKqa10496
 // One Inactivity cop runs on each thread once every second and
 // loops through the list of NetVCs and calls the timeouts
-struct InactivityCop:public Continuation
-{
-  InactivityCop(ProxyMutex *m):Continuation(m)
-  {
+struct InactivityCop : public Continuation {
+  InactivityCop(ProxyMutex *m):Continuation(m) {
     SET_HANDLER(&InactivityCop::check_inactivity);
   }
-  int check_inactivity(int event, Event *e)
-  {
+  int check_inactivity(int event, Event *e) {
     (void) event;
     ink_hrtime now = ink_get_hrtime();
     NetHandler *nh = get_NetHandler(this_ethread());
-    UnixNetVConnection *vc = nh->open_list.head, *vc_next = 0;
-    while (vc) {
-      vc_next = (UnixNetVConnection*)vc->link.next;
-      if (vc->inactivity_timeout_in && vc->next_inactivity_timeout_at && vc->next_inactivity_timeout_at < now){
+    // Copy the list and use pop() to catch any closes caused by callbacks.
+    forl_LL(UnixNetVConnection, vc, nh->open_list)
+      nh->cop_list.push(vc);
+    while (UnixNetVConnection *vc = nh->cop_list.pop()) {
+      if (vc->closed) {
+        close_UnixNetVConnection(vc, e->ethread);
+        continue;
+      } 
+      if (vc->next_inactivity_timeout_at && vc->next_inactivity_timeout_at < now)
         vc->handleEvent(EVENT_IMMEDIATE, e);
-      } else {
-        if (vc->closed)
-          close_UnixNetVConnection(vc, e->ethread);
-      }
-      vc = vc_next;
     }
     return 0;
   }
 };
 #endif
 
-PollCont::PollCont(ProxyMutex *m, int pt):Continuation(m), net_handler(NULL), poll_timeout(pt)
-{
+PollCont::PollCont(ProxyMutex *m, int pt):Continuation(m), net_handler(NULL), poll_timeout(pt) {
   pollDescriptor = NEW(new PollDescriptor);
   pollDescriptor->init();
   SET_HANDLER(&PollCont::pollEvent);
 }
 
-PollCont::PollCont(ProxyMutex *m, NetHandler *nh, int pt):Continuation(m), net_handler(nh),
-poll_timeout(pt)
+PollCont::PollCont(ProxyMutex *m, NetHandler *nh, int pt):Continuation(m), net_handler(nh), poll_timeout(pt)
 {
   pollDescriptor = NEW(new PollDescriptor);
   pollDescriptor->init();
   SET_HANDLER(&PollCont::pollEvent);
 }
 
-PollCont::~PollCont()
-{
+PollCont::~PollCont() {
   delete pollDescriptor;
 }
 
 //
-// Changed by YTS Team, yamsat
 // PollCont continuation which does the epoll_wait
 // and stores the resultant events in ePoll_Triggered_Events
 //
 int
-PollCont::pollEvent(int event, Event *e)
-{
+PollCont::pollEvent(int event, Event *e) {
   (void) event;
   (void) e;
 

Modified: trafficserver/traffic/branches/3.0.x/iocore/net/UnixNetVConnection.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/iocore/net/UnixNetVConnection.cc?rev=1146921&r1=1146920&r2=1146921&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/iocore/net/UnixNetVConnection.cc (original)
+++ trafficserver/traffic/branches/3.0.x/iocore/net/UnixNetVConnection.cc Thu Jul 14 23:34:01 2011
@@ -81,9 +81,10 @@ net_activity(UnixNetVConnection *vc, ETh
       vc->inactivity_timeout = 0;
   }
 #else
-  vc->next_inactivity_timeout_at = 0;
   if (vc->inactivity_timeout_in)
     vc->next_inactivity_timeout_at = ink_get_hrtime() + vc->inactivity_timeout_in;
+  else
+    vc->next_inactivity_timeout_at = 0;
 #endif
 
 }
@@ -113,6 +114,7 @@ close_UnixNetVConnection(UnixNetVConnect
   }
   vc->active_timeout_in = 0;
   nh->open_list.remove(vc);
+  nh->cop_list.remove(vc);
   nh->read_ready_list.remove(vc);
   nh->write_ready_list.remove(vc);
   if (vc->read.in_enabled_list) {