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 2012/03/20 05:12:57 UTC

[2/2] git commit: Revert "interm" this was a mistaken push.

Revert "interm" this was a mistaken push.

This reverts commit 9310f113af338143d71e03f02dcd9ef948116fdb.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/5f4bb969
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/5f4bb969
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/5f4bb969

Branch: refs/heads/3.0.x
Commit: 5f4bb969f15d2a8eb6867138b1106e0028b6048a
Parents: 9310f11
Author: jplevyak@apache.org <jp...@apache.org>
Authored: Mon Mar 19 21:11:15 2012 -0700
Committer: John Plevyak <jp...@acm.org>
Committed: Mon Mar 19 21:11:15 2012 -0700

----------------------------------------------------------------------
 iocore/cache/CacheWrite.cc |   47 ++++++++++++++++++++------------------
 1 files changed, 25 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5f4bb969/iocore/cache/CacheWrite.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/CacheWrite.cc b/iocore/cache/CacheWrite.cc
index 42e7396..f87dea7 100644
--- a/iocore/cache/CacheWrite.cc
+++ b/iocore/cache/CacheWrite.cc
@@ -1543,33 +1543,36 @@ CacheVC::openWriteStartDone(int event, Event *e)
       first_buf = buf;
       goto Lsuccess;
     }
+  }
 
 Lcollision:
-    {
-      int if_writers = ((uintptr_t) info == CACHE_ALLOW_MULTIPLE_WRITES);
-      if (!od) {
-        if ((err = vol->open_write(
-                this, if_writers, cache_config_http_max_alts > 1 ? cache_config_http_max_alts : 0)) > 0)
-          goto Lfailure;
-        if (od->has_multiple_writers()) {
-          MUTEX_RELEASE(lock);
-          SET_HANDLER(&CacheVC::openWriteMain);
-          return callcont(CACHE_EVENT_OPEN_WRITE);
-        }
-      }
-      // check for collision
-      if (dir_probe(&first_key, vol, &dir, &last_collision)) {
-        od->reading_vec = 1;
-        int ret = do_read_call(&first_key);
-        if (ret == EVENT_RETURN)
-          goto Lcallreturn;
-        return ret;
-      }
-      if (f.update) {
-        // fail update because vector has been GC'd
+  {
+    int if_writers = ((uintptr_t) info == CACHE_ALLOW_MULTIPLE_WRITES);
+    CACHE_TRY_LOCK(lock, vol->mutex, mutex->thread_holding);
+    if (!lock)
+      VC_LOCK_RETRY_EVENT();
+    if (!od) {
+      if ((err = vol->open_write(
+             this, if_writers, cache_config_http_max_alts > 1 ? cache_config_http_max_alts : 0)) > 0)
         goto Lfailure;
+      if (od->has_multiple_writers()) {
+        MUTEX_RELEASE(lock);
+        SET_HANDLER(&CacheVC::openWriteMain);
+        return callcont(CACHE_EVENT_OPEN_WRITE);
       }
     }
+    // check for collision
+    if (dir_probe(&first_key, vol, &dir, &last_collision)) {
+      od->reading_vec = 1;
+      int ret = do_read_call(&first_key);
+      if (ret == EVENT_RETURN)
+        goto Lcallreturn;
+      return ret;
+    }
+    if (f.update) {
+      // fail update because vector has been GC'd
+      goto Lfailure;
+    }
   }
 Lsuccess:
   od->reading_vec = 0;