You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2015/05/12 06:13:52 UTC
trafficserver git commit: Fix crash on partial fill.
Repository: trafficserver
Updated Branches:
refs/heads/ts-974-5-3-x e18407ca3 -> a7b775e20
Fix crash on partial fill.
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/a7b775e2
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/a7b775e2
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/a7b775e2
Branch: refs/heads/ts-974-5-3-x
Commit: a7b775e20a28f82b159715072cae16f6fdf4c579
Parents: e18407c
Author: Alan M. Carroll <so...@yahoo-inc.com>
Authored: Mon May 11 23:13:31 2015 -0500
Committer: Alan M. Carroll <so...@yahoo-inc.com>
Committed: Mon May 11 23:13:31 2015 -0500
----------------------------------------------------------------------
iocore/cache/CacheHttp.cc | 16 ++++++++++------
iocore/cache/CacheRead.cc | 3 ++-
2 files changed, 12 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/a7b775e2/iocore/cache/CacheHttp.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/CacheHttp.cc b/iocore/cache/CacheHttp.cc
index 4b66ea6..623e5b8 100644
--- a/iocore/cache/CacheHttp.cc
+++ b/iocore/cache/CacheHttp.cc
@@ -284,8 +284,10 @@ CacheHTTPInfoVector::write_complete(CacheKey const& alt_key, CacheVC* vc, bool s
if (success) item._alternate.mark_frag_write(vc->fragment);
// Kick all the waiters, success or fail.
- while (NULL != (reader = item._waiting.pop()))
- eventProcessor.schedule_imm(reader);
+ while (NULL != (reader = item._waiting.pop())) {
+ Debug("amc", "[write_complete] wake up %p", reader);
+ reader->wake_up_thread->schedule_imm(reader)->cookie = reinterpret_cast<void*>(0x56);
+ }
return *this;
}
@@ -323,10 +325,12 @@ CacheHTTPInfoVector::wait_for(CacheKey const& alt_key, CacheVC* vc, int64_t offs
Item& item = data[alt_idx];
int frag_idx = item._alternate.get_frag_index_of(offset);
vc->fragment = frag_idx; // really? Shouldn't this already be set?
- if (item.has_writers())
- item._waiting.push(vc);
- else
+ if (item.has_writers()) {
+ if (! item._waiting.in(vc))
+ item._waiting.push(vc);
+ } else {
zret = false;
+ }
return zret;
}
@@ -342,7 +346,7 @@ CacheHTTPInfoVector::close_writer(CacheKey const& alt_key, CacheVC* vc)
item._writers.remove(vc);
while (NULL != (reader = item._waiting.pop())) {
Debug("amc", "[close_writer] wake up %p", reader);
- reader->wake_up_thread->schedule_imm(reader);
+ reader->wake_up_thread->schedule_imm(reader)->cookie = reinterpret_cast<void*>(0x56);
}
return *this;
}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/a7b775e2/iocore/cache/CacheRead.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/CacheRead.cc b/iocore/cache/CacheRead.cc
index e1a8ee1..52a395c 100644
--- a/iocore/cache/CacheRead.cc
+++ b/iocore/cache/CacheRead.cc
@@ -318,12 +318,13 @@ CacheVC::openReadFromWriter(int event, Event *e)
return openReadStartEarliest(event, e);
} else {
if (cache_config_select_alternate) {
- alternate_index = HttpTransactCache::SelectFromAlternates(&vector, &request, params);
+ alternate_index = HttpTransactCache::SelectFromAlternates(&od->vector, &request, params);
if (alternate_index < 0) {
MUTEX_RELEASE(lock_od);
SET_HANDLER(&CacheVC::openReadFromWriterFailure);
return openReadFromWriterFailure(CACHE_EVENT_OPEN_READ_FAILED, reinterpret_cast<Event *>(-ECACHE_ALT_MISS));
}
+ write_vector = &od->vector;
} else {
alternate_index = 0;
}