You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2010/03/10 01:39:31 UTC

svn commit: r921194 - /incubator/trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc

Author: jplevyak
Date: Wed Mar 10 00:39:30 2010
New Revision: 921194

URL: http://svn.apache.org/viewvc?rev=921194&view=rev
Log:
TS-158: fixed parenthesization bug during lock retry handling on TS-158 fix

Modified:
    incubator/trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc

Modified: incubator/trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc?rev=921194&r1=921193&r2=921194&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc (original)
+++ incubator/trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc Wed Mar 10 00:39:30 2010
@@ -1410,10 +1410,8 @@ CacheVC::openWriteOverwrite(int event, E
   } else {
     Doc *doc = NULL;
     set_io_not_in_progress();
-    if (_action.cancelled) {
-      SET_HANDLER(&CacheVC::openWriteCloseDir);
+    if (_action.cancelled)
       return openWriteCloseDir(event, e);
-    }
     if (!io.ok())
       goto Ldone;
     doc = (Doc *) buf->data();
@@ -1551,15 +1549,14 @@ Lfailure:
 Lcancel:
   if (od) {
     od->reading_vec = 0;
-    SET_HANDLER(&CacheVC::openWriteCloseDir);
-    openWriteCloseDir(event, e);
-    return EVENT_DONE;
+    return openWriteCloseDir(event, e);
   } else
     return free_CacheVC(this);
 Lcallreturn:
   return handleEvent(AIO_EVENT_DONE, 0); // hopefully a tail call
 }
 #endif
+
 // handle lock failures from main Cache::open_write entry points below
 int
 CacheVC::openWriteStartBegin(int event, Event *e)
@@ -1571,19 +1568,19 @@ CacheVC::openWriteStartBegin(int event, 
   cancel_trigger();
   if (_action.cancelled)
     return free_CacheVC(this);
-  if ((err = part->open_write_lock(this, false, 1) > 0)) {
+  if (((err = part->open_write_lock(this, false, 1)) > 0)) {
     CACHE_INCREMENT_DYN_STAT(base_stat + CACHE_STAT_FAILURE);
     free_CacheVC(this);
     _action.continuation->handleEvent(CACHE_EVENT_OPEN_WRITE_FAILED, (void *) -err);
-    return 0;
+    return EVENT_DONE;
   }
   if (err < 0)
     VC_SCHED_LOCK_RETRY();
   if (f.overwrite) {
-     SET_HANDLER(&CacheVC::openWriteOverwrite);
+    SET_HANDLER(&CacheVC::openWriteOverwrite);
     return openWriteOverwrite(EVENT_IMMEDIATE, 0);
   } else {
-     // write by key
+    // write by key
     SET_HANDLER(&CacheVC::openWriteMain);
     return callcont(CACHE_EVENT_OPEN_WRITE);
   }
@@ -1605,6 +1602,7 @@ Cache::open_write(Continuation *cont, Ca
   intptr_t res = 0;
   CacheVC *c = new_CacheVC(cont);
   ProxyMutex *mutex = cont->mutex;
+  MUTEX_LOCK(lock, c->mutex, this_ethread());
   c->vio.op = VIO::WRITE;
   c->base_stat = cache_write_active_stat;
   c->part = key_to_part(key, hostname, host_len);
@@ -1779,7 +1777,6 @@ Lfailure:
   CACHE_INCREMENT_DYN_STAT(c->base_stat + CACHE_STAT_FAILURE);
   cont->handleEvent(CACHE_EVENT_OPEN_WRITE_FAILED, (void *) -err);
   if (c->od) {
-    SET_CONTINUATION_HANDLER(c, &CacheVC::openWriteCloseDir);
     c->openWriteCloseDir(EVENT_IMMEDIATE, 0);
     return ACTION_RESULT_DONE;
   }