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 2014/03/27 18:19:55 UTC
[1/2] git commit: TS-2672: allow mime_hdr_field_detach to be called
on detached MIME headers
Repository: trafficserver
Updated Branches:
refs/heads/master 9c84680a0 -> 5d38019f2
TS-2672: allow mime_hdr_field_detach to be called on detached MIME headers
Allow mime_hdr_field_detach() to be called on detached MIME headers
so that TSMimeHdrFieldDestroy() can be called on a field that has
been detached by TSMimeHdrFieldRemove(). This matches the behavior
of mime_hdr_field_attach(), which silently ignores calls to attach
fields that are not detached.
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/b92bbc1e
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/b92bbc1e
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/b92bbc1e
Branch: refs/heads/master
Commit: b92bbc1ed0cf2b0aef00531e2b9e03a9ef46f2e2
Parents: 9c84680
Author: James Peach <jp...@apache.org>
Authored: Wed Mar 26 16:54:59 2014 -0700
Committer: James Peach <jp...@apache.org>
Committed: Thu Mar 27 10:14:46 2014 -0700
----------------------------------------------------------------------
CHANGES | 2 ++
proxy/hdrs/MIME.cc | 8 +++++++-
2 files changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b92bbc1e/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index a60ef74..5e6e208 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
-*- coding: utf-8 -*-
Changes with Apache Traffic Server 5.0.0
+ *) [TS-2672] TSMimeHdrFieldDestroy should not assert on removed fields.
+
*) [TS-2554] New plugin: background_fetch, which under certain conditions
will kick off a background fetch when it detects Range request and
responses. This allows for the cache to start populating objects that would
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b92bbc1e/proxy/hdrs/MIME.cc
----------------------------------------------------------------------
diff --git a/proxy/hdrs/MIME.cc b/proxy/hdrs/MIME.cc
index 0de0db2..a2b61c8 100644
--- a/proxy/hdrs/MIME.cc
+++ b/proxy/hdrs/MIME.cc
@@ -1517,8 +1517,14 @@ mime_hdr_field_detach(MIMEHdrImpl *mh, MIMEField *field, bool detach_all_dups)
{
MIMEField *next_dup = field->m_next_dup;
- ink_assert(field->is_live());
+ // If this field is already detached, there's nothing to do. There must
+ // not be a dup list if we detached correctly.
+ if (field->m_readiness == MIME_FIELD_SLOT_READINESS_DETACHED) {
+ ink_assert(next_dup == NULL);
+ return;
+ }
+ ink_assert(field->is_live());
MIME_HDR_SANITY_CHECK(mh);
// Normally, this function is called with the current dup list head,
[2/2] git commit: TS-2672: add MIMEField::is_detached to match is_live
Posted by jp...@apache.org.
TS-2672: add MIMEField::is_detached to match is_live
Add a matching is_detached accessor for the MIMEField readiness
state. Update all the non-assertion places that access
MIMEField::m_readiness directly.
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/5d38019f
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/5d38019f
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/5d38019f
Branch: refs/heads/master
Commit: 5d38019f2dab63e0f49f6b655e3f535d8e960528
Parents: b92bbc1
Author: James Peach <jp...@apache.org>
Authored: Wed Mar 26 16:26:35 2014 -0700
Committer: James Peach <jp...@apache.org>
Committed: Thu Mar 27 10:14:47 2014 -0700
----------------------------------------------------------------------
proxy/hdrs/MIME.cc | 37 +++++++++++++++++++++++--------------
proxy/hdrs/MIME.h | 25 ++++++++++++++-----------
2 files changed, 37 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5d38019f/proxy/hdrs/MIME.cc
----------------------------------------------------------------------
diff --git a/proxy/hdrs/MIME.cc b/proxy/hdrs/MIME.cc
index a2b61c8..084ecef 100644
--- a/proxy/hdrs/MIME.cc
+++ b/proxy/hdrs/MIME.cc
@@ -522,7 +522,7 @@ mime_hdr_sanity_check(MIMEHdrImpl *mh)
for (index = 0; index < fblock->m_freetop; index++) {
field = &(fblock->m_field_slots[index]);
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE) {
+ if (field->is_live()) {
// dummy operations just to make sure deref doesn't crash
checksum_block(field->m_ptr_name, field->m_len_name);
if (field->m_ptr_value)
@@ -1143,10 +1143,13 @@ void
mime_hdr_field_block_list_adjust(int /* block_count ATS_UNUSED */, MIMEFieldBlockImpl *old_list,
MIMEFieldBlockImpl *new_list)
{
- for (MIMEFieldBlockImpl *new_blk = new_list; new_blk; new_blk = new_blk->m_next)
- for (MIMEField *field = new_blk->m_field_slots, *end=field + new_blk->m_freetop; field != end; ++field)
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE && field->m_next_dup)
+ for (MIMEFieldBlockImpl *new_blk = new_list; new_blk; new_blk = new_blk->m_next) {
+ for (MIMEField *field = new_blk->m_field_slots, *end=field + new_blk->m_freetop; field != end; ++field) {
+ if (field->is_live() && field->m_next_dup) {
relocate(field, new_list, old_list);
+ }
+ }
+ }
}
int
@@ -1161,8 +1164,9 @@ mime_hdr_length_get(MIMEHdrImpl *mh)
for (fblock = &(mh->m_first_fblock); fblock != NULL; fblock = fblock->m_next) {
for (index = 0; index < fblock->m_freetop; index++) {
field = &(fblock->m_field_slots[index]);
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE)
+ if (field->is_live()) {
length += mime_field_length_get(field);
+ }
}
}
@@ -1418,8 +1422,9 @@ mime_hdr_field_attach(MIMEHdrImpl *mh, MIMEField *field, int check_for_dups, MIM
{
MIME_HDR_SANITY_CHECK(mh);
- if (field->m_readiness != MIME_FIELD_SLOT_READINESS_DETACHED)
+ if (!field->is_detached()) {
return;
+ }
ink_assert(field->m_ptr_name != NULL);
@@ -1519,7 +1524,7 @@ mime_hdr_field_detach(MIMEHdrImpl *mh, MIMEField *field, bool detach_all_dups)
// If this field is already detached, there's nothing to do. There must
// not be a dup list if we detached correctly.
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_DETACHED) {
+ if (field->is_detached()) {
ink_assert(next_dup == NULL);
return;
}
@@ -1590,15 +1595,21 @@ mime_hdr_field_delete(HdrHeap *heap, MIMEHdrImpl *mh, MIMEField *field, bool del
MIME_HDR_SANITY_CHECK(mh);
mime_hdr_field_detach(mh, field, 0);
+
MIME_HDR_SANITY_CHECK(mh);
mime_field_destroy(mh, field);
+
MIME_HDR_SANITY_CHECK(mh);
field = next;
}
} else {
heap->free_string(field->m_ptr_name, field->m_len_name);
heap->free_string(field->m_ptr_value, field->m_len_value);
+
+ MIME_HDR_SANITY_CHECK(mh);
mime_hdr_field_detach(mh, field, 0);
+
+ MIME_HDR_SANITY_CHECK(mh);
mime_field_destroy(mh, field);
}
@@ -3521,7 +3532,7 @@ MIMEFieldBlockImpl::marshal(MarshalXlate *ptr_xlate, int num_ptr, MarshalXlate *
for (uint32_t index = 0; index < m_freetop; index++) {
MIMEField *field = &(m_field_slots[index]);
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE) {
+ if (field->is_live()) {
HDR_MARSHAL_STR_1(field->m_ptr_name, str_xlate);
HDR_MARSHAL_STR_1(field->m_ptr_value, str_xlate);
if (field->m_next_dup) {
@@ -3533,7 +3544,7 @@ MIMEFieldBlockImpl::marshal(MarshalXlate *ptr_xlate, int num_ptr, MarshalXlate *
for (uint32_t index = 0; index < m_freetop; index++) {
MIMEField *field = &(m_field_slots[index]);
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE) {
+ if (field->is_live()) {
HDR_MARSHAL_STR(field->m_ptr_name, str_xlate, num_str);
HDR_MARSHAL_STR(field->m_ptr_value, str_xlate, num_str);
if (field->m_next_dup) {
@@ -3555,7 +3566,7 @@ MIMEFieldBlockImpl::unmarshal(intptr_t offset)
MIMEField *field = &(m_field_slots[index]);
// FIX ME - DO I NEED TO DEAL WITH OTHER READINESSES?
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE) {
+ if (field->is_live()) {
HDR_UNMARSHAL_STR(field->m_ptr_name, offset);
HDR_UNMARSHAL_STR(field->m_ptr_value, offset);
if (field->m_next_dup) {
@@ -3572,8 +3583,7 @@ MIMEFieldBlockImpl::move_strings(HdrStrHeap *new_heap)
for (uint32_t index = 0; index < m_freetop; index++) {
MIMEField *field = &(m_field_slots[index]);
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE ||
- field->m_readiness == MIME_FIELD_SLOT_READINESS_DETACHED) {
+ if (field->is_live() || field->is_detached()) {
// FIX ME - Should do the field in one shot and preserve
// raw_printable if it's set
field->m_n_v_raw_printable = 0;
@@ -3590,8 +3600,7 @@ MIMEFieldBlockImpl::check_strings(HeapCheck *heaps, int num_heaps)
for (uint32_t index = 0; index < m_freetop; index++) {
MIMEField *field = &(m_field_slots[index]);
- if (field->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE ||
- field->m_readiness == MIME_FIELD_SLOT_READINESS_DETACHED) {
+ if (field->is_live() || field->is_detached()) {
// FIX ME - Should check raw printing characters as well
CHECK_STR(field->m_ptr_name, field->m_len_name, heaps, num_heaps);
CHECK_STR(field->m_ptr_value, field->m_len_value, heaps, num_heaps);
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5d38019f/proxy/hdrs/MIME.h
----------------------------------------------------------------------
diff --git a/proxy/hdrs/MIME.h b/proxy/hdrs/MIME.h
index 9c7b721..04bc35b 100644
--- a/proxy/hdrs/MIME.h
+++ b/proxy/hdrs/MIME.h
@@ -110,24 +110,27 @@ struct MIMEField
uint8_t m_readiness:2; // 2/8
uint8_t m_flags:2; // 2/8
- int is_dup_head()
- {
+ bool is_dup_head() const {
return (m_flags & MIME_FIELD_SLOT_FLAGS_DUP_HEAD);
}
- int is_live()
- {
+
+ bool is_cooked() {
+ return (m_flags & MIME_FIELD_SLOT_FLAGS_COOKED);
+ }
+
+ bool is_live() const {
return (m_readiness == MIME_FIELD_SLOT_READINESS_LIVE);
}
- int is_cooked()
- {
- return (m_flags & MIME_FIELD_SLOT_FLAGS_COOKED);
+
+ bool is_detached() const {
+ return (m_readiness == MIME_FIELD_SLOT_READINESS_DETACHED);
}
- int supports_commas()
- {
+
+ bool supports_commas() const {
if (m_wks_idx >= 0)
return (hdrtoken_index_to_flags(m_wks_idx) & MIME_FLAGS_COMMAS);
else
- return (1); // by default, assume supports commas
+ return true; // by default, assume supports commas
}
const char *name_get(int *length);
@@ -1134,7 +1137,7 @@ MIMEHdr::iter_get_next(MIMEFieldIter * iter)
while (b) {
for (; slot < (int) b->m_freetop; slot++) {
f = &(b->m_field_slots[slot]);
- if (f->m_readiness == MIME_FIELD_SLOT_READINESS_LIVE) {
+ if (f->is_live()) {
iter->m_slot = slot;
iter->m_block = b;
return f;