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

svn commit: r910804 - in /incubator/trafficserver/traffic/trunk/proxy/hdrs: URL.cc URL.h

Author: zwoop
Date: Wed Feb 17 02:31:57 2010
New Revision: 910804

URL: http://svn.apache.org/viewvc?rev=910804&view=rev
Log:
TS-185: url_host_set() is free-ing and allocating memory at every call

	Author: Manjesh Nilange
	Review: Leif H.

Modified:
    incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.cc
    incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.h

Modified: incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.cc?rev=910804&r1=910803&r2=910804&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.cc (original)
+++ incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.cc Wed Feb 17 02:31:57 2010
@@ -177,6 +177,7 @@
   obj_clear_data((HdrHeapObjImpl *) url);
   url->m_url_type = URL_TYPE_NONE;
   url->m_scheme_wks_idx = -1;
+  url->m_capacity_host = 0;
   url_clear_string_ref(url);
   return (url);
 }
@@ -313,7 +314,7 @@
   HDR_MOVE_STR(m_ptr_scheme, m_len_scheme);
   HDR_MOVE_STR(m_ptr_user, m_len_user);
   HDR_MOVE_STR(m_ptr_password, m_len_password);
-  HDR_MOVE_STR(m_ptr_host, m_len_host);
+  HDR_MOVE_STR(m_ptr_host, m_capacity_host);
   HDR_MOVE_STR(m_ptr_port, m_len_port);
   HDR_MOVE_STR(m_ptr_path, m_len_path);
   HDR_MOVE_STR(m_ptr_params, m_len_params);
@@ -328,7 +329,7 @@
   CHECK_STR(m_ptr_scheme, m_len_scheme, heaps, num_heaps);
   CHECK_STR(m_ptr_user, m_len_user, heaps, num_heaps);
   CHECK_STR(m_ptr_password, m_len_password, heaps, num_heaps);
-  CHECK_STR(m_ptr_host, m_len_host, heaps, num_heaps);
+  CHECK_STR(m_ptr_host, m_capacity_host, heaps, num_heaps);
   CHECK_STR(m_ptr_port, m_len_port, heaps, num_heaps);
   CHECK_STR(m_ptr_path, m_len_path, heaps, num_heaps);
   CHECK_STR(m_ptr_params, m_len_params, heaps, num_heaps);
@@ -410,9 +411,27 @@
 url_host_set(HdrHeap * heap, URLImpl * url, const char *value, int length, bool copy_string)
 {
   url_called_set(url);
-  if (length == 0)
-    value = NULL;
-  mime_str_u16_set(heap, value, length, &(url->m_ptr_host), &(url->m_len_host), copy_string);
+  if ((length <= 0) || (value == NULL)) {
+    url->m_len_host = 0;
+    return;
+  }
+
+  if (!copy_string) {
+    url->m_ptr_host = value;
+    url->m_len_host = length;
+    return;
+  }
+
+  if (url->m_capacity_host < length) {
+    if (url->m_capacity_host) {
+      heap->free_string(url->m_ptr_host, url->m_capacity_host);
+    }
+    url->m_ptr_host = heap->duplicate_str(value, length);
+    url->m_capacity_host = url->m_len_host = length;
+  } else {
+    memcpy(const_cast<char *>(url->m_ptr_host), value, length);
+    url->m_len_host = length;
+  }
 }
 
 /*-------------------------------------------------------------------------

Modified: incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.h?rev=910804&r1=910803&r2=910804&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.h (original)
+++ incubator/trafficserver/traffic/trunk/proxy/hdrs/URL.h Wed Feb 17 02:31:57 2010
@@ -50,6 +50,7 @@
   inku16 m_len_user;
   inku16 m_len_password;
   inku16 m_len_host;
+  inku16 m_capacity_host;
   inku16 m_len_port;
   inku16 m_len_path;
   inku16 m_len_params;