masaori335 edited a comment on issue #7380:
URL: https://github.com/apache/trafficserver/issues/7380#issuecomment-749296982


   When the `number_of_redirections` is more than 1 and the negative cache is 
enabled, the transaction comes into line 4469 twice. The `HTTPCacheAlt`, which 
allocated on the first call, leaks because it's not freed before the second 
call of `HTTPInfo::create()`.
   
   
https://github.com/apache/trafficserver/blob/95d1069a9c5f70fe8b0fb57feec95e559ab92b91/proxy/http/HttpTransact.cc#L4467-L4469
   
   Moreover, the master & 9.0.x has the same issue. 
   
   <details>
   <summary>Steps on LLDB (click to expand)</summary>
   
   ```
   #
   # the first call
   #
   Process 91536 stopped
   * thread #5, name = '[ET_NET 3]', stop reason = breakpoint 1.1
       frame #0: 0x0000000100388f78 
traffic_server`HttpTransact::handle_cache_operation_on_forward_server_response(s=0x0000625000020a08)
 at HttpTransact.cc:4469:9
      4466         s->cache_info.action == CACHE_DO_REPLACE) {
      4467       if (s->is_cacheable_and_negative_caching_is_enabled) {
      4468         HTTPHdr *resp;
   -> 4469         s->cache_info.object_store.create();
      4470         
s->cache_info.object_store.request_set(&s->hdr_info.client_request);
      4471         
s->cache_info.object_store.response_set(&s->hdr_info.server_response);
      4472         resp = s->cache_info.object_store.response_get();
   (lldb) p s->cache_info.object_store
   (HTTPInfo) $0 = {
     m_alt = 0x0000000000000000
   }
   (lldb) n
   Process 91536 stopped
   * thread #5, name = '[ET_NET 3]', stop reason = step over
       frame #0: 0x0000000100388f93 
traffic_server`HttpTransact::handle_cache_operation_on_forward_server_response(s=0x0000625000020a08)
 at HttpTransact.cc:4470:9
      4467       if (s->is_cacheable_and_negative_caching_is_enabled) {
      4468         HTTPHdr *resp;
      4469         s->cache_info.object_store.create();
   -> 4470         
s->cache_info.object_store.request_set(&s->hdr_info.client_request);
      4471         
s->cache_info.object_store.response_set(&s->hdr_info.server_response);
      4472         resp = s->cache_info.object_store.response_get();
      4473         if (!resp->presence(MIME_PRESENCE_EXPIRES)) {
   (lldb) p s->cache_info.object_store
   (HTTPInfo) $1 = {
     m_alt = 0x0000612000030040
   }
   #
   # the second call
   #
   Process 91536 stopped
   * thread #5, name = '[ET_NET 3]', stop reason = breakpoint 1.1
       frame #0: 0x0000000100388f78 
traffic_server`HttpTransact::handle_cache_operation_on_forward_server_response(s=0x0000625000020a08)
 at HttpTransact.cc:4469:9
      4466         s->cache_info.action == CACHE_DO_REPLACE) {
      4467       if (s->is_cacheable_and_negative_caching_is_enabled) {
      4468         HTTPHdr *resp;
   -> 4469         s->cache_info.object_store.create();
      4470         
s->cache_info.object_store.request_set(&s->hdr_info.client_request);
      4471         
s->cache_info.object_store.response_set(&s->hdr_info.server_response);
      4472         resp = s->cache_info.object_store.response_get();
   (lldb) p s->cache_info.object_store
   (HTTPInfo) $2 = {
     m_alt = 0x0000612000030040
   }
   (lldb) n
   Process 91536 stopped
   * thread #5, name = '[ET_NET 3]', stop reason = step over
       frame #0: 0x0000000100388f93 
traffic_server`HttpTransact::handle_cache_operation_on_forward_server_response(s=0x0000625000020a08)
 at HttpTransact.cc:4470:9
      4467       if (s->is_cacheable_and_negative_caching_is_enabled) {
      4468         HTTPHdr *resp;
      4469         s->cache_info.object_store.create();
   -> 4470         
s->cache_info.object_store.request_set(&s->hdr_info.client_request);
      4471         
s->cache_info.object_store.response_set(&s->hdr_info.server_response);
      4472         resp = s->cache_info.object_store.response_get();
      4473         if (!resp->presence(MIME_PRESENCE_EXPIRES)) {
   (lldb) p s->cache_info.object_store
   (HTTPInfo) $3 = {
     m_alt = 0x00006120000301c0
   }
   ```
   
   </details>


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to