You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by yu...@apache.org on 2013/12/22 11:13:08 UTC

git commit: TS-2363: Fix assertion of "Unknown file format type!"

Updated Branches:
  refs/heads/master 3421c6e42 -> 9410b755e


TS-2363: Fix assertion of "Unknown file format type!"

What leading to this assertion is that LogFile object passed to
flush thread has been destroyed within Log::periodic_tasks()
when accessing it.

This patch introduces refcount for LogFile object to avoid been
destroyed untimely.

Signed-off-by: Yunkai Zhang <qi...@taobao.com>


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

Branch: refs/heads/master
Commit: 9410b755e99322fa81ed24212b0c7902cb153e47
Parents: 3421c6e
Author: Yunkai Zhang <qi...@taobao.com>
Authored: Sun Dec 22 14:29:46 2013 +0800
Committer: Yunkai Zhang <qi...@taobao.com>
Committed: Sun Dec 22 18:01:39 2013 +0800

----------------------------------------------------------------------
 CHANGES                    | 2 ++
 proxy/logging/Log.h        | 2 +-
 proxy/logging/LogFile.h    | 2 +-
 proxy/logging/LogHost.cc   | 3 +--
 proxy/logging/LogHost.h    | 2 +-
 proxy/logging/LogObject.cc | 8 ++------
 proxy/logging/LogObject.h  | 2 +-
 7 files changed, 9 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9410b755/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index d5d4fc7..eb361c0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 4.2.0
 
+  *) [TS-2363] Fix assertion of "Unknown file format type!".
+
   *) [TS-2448] Fix traffic_cop and traffic_manager to obey the proxy.config.local_state_dir setting.
 
   *) [TS-2445] Fix problem with 204 responses closing POST requests

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9410b755/proxy/logging/Log.h
----------------------------------------------------------------------
diff --git a/proxy/logging/Log.h b/proxy/logging/Log.h
index a646275..92c4525 100644
--- a/proxy/logging/Log.h
+++ b/proxy/logging/Log.h
@@ -316,7 +316,7 @@ class LogFlushData
 {
 public:
   LINK(LogFlushData, link);
-  LogFile *m_logfile;
+  Ptr<LogFile> m_logfile;
   LogBuffer *logbuffer;
   void *m_data;
   int m_len;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9410b755/proxy/logging/LogFile.h
----------------------------------------------------------------------
diff --git a/proxy/logging/LogFile.h b/proxy/logging/LogFile.h
index 1995ee7..1f8c275 100644
--- a/proxy/logging/LogFile.h
+++ b/proxy/logging/LogFile.h
@@ -122,7 +122,7 @@ public:
   LogFile
   -------------------------------------------------------------------------*/
 
-class LogFile:public LogBufferSink
+class LogFile:public LogBufferSink, public RefCountObj
 {
 public:
   LogFile(const char *name, const char *header, LogFileFormat format, uint64_t signature,

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9410b755/proxy/logging/LogHost.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogHost.cc b/proxy/logging/LogHost.cc
index c764f77..89647aa 100644
--- a/proxy/logging/LogHost.cc
+++ b/proxy/logging/LogHost.cc
@@ -335,7 +335,7 @@ LogHost::clear()
 
   ats_free(m_name);
   delete m_sock;
-  delete m_orphan_file;
+  m_orphan_file.clear();
 
   ink_zero(m_ip);
   m_port = 0;
@@ -344,7 +344,6 @@ LogHost::clear()
   m_sock = NULL;
   m_sock_fd = -1;
   m_connected = false;
-  m_orphan_file = NULL;
 }
 
 bool LogHost::authenticated()

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9410b755/proxy/logging/LogHost.h
----------------------------------------------------------------------
diff --git a/proxy/logging/LogHost.h b/proxy/logging/LogHost.h
index cc7cc6d..8442656 100644
--- a/proxy/logging/LogHost.h
+++ b/proxy/logging/LogHost.h
@@ -87,7 +87,7 @@ private:
   LogSock *m_sock;
   int m_sock_fd;
   bool m_connected;
-  LogFile *m_orphan_file;
+  Ptr<LogFile> m_orphan_file;
   LogCollationClientSM *m_log_collation_client_sm;
 
 public:

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9410b755/proxy/logging/LogObject.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogObject.cc b/proxy/logging/LogObject.cc
index 5109469..4869448 100644
--- a/proxy/logging/LogObject.cc
+++ b/proxy/logging/LogObject.cc
@@ -184,7 +184,6 @@ LogObject::~LogObject()
       m_host_list.clear();
     }
   }
-  delete m_logFile;
   ats_free(m_basename);
   ats_free(m_filename);
   ats_free(m_alt_filename);
@@ -311,12 +310,9 @@ LogObject::add_loghost(LogHost * host, bool copy)
 
   // A LogObject either writes to a file, or sends to a collation host, but
   // not both. By default, it writes to a file. If a LogHost is specified,
-  // then delete the LogFile object
+  // then clear the intelligent Ptr containing LogFile.
   //
-  if (m_logFile) {
-    delete m_logFile;
-    m_logFile = NULL;
-  }
+  m_logFile.clear();
 }
 
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9410b755/proxy/logging/LogObject.h
----------------------------------------------------------------------
diff --git a/proxy/logging/LogObject.h b/proxy/logging/LogObject.h
index 06bf4c9..1c67082 100644
--- a/proxy/logging/LogObject.h
+++ b/proxy/logging/LogObject.h
@@ -203,7 +203,7 @@ public:
 public:
   bool m_auto_created;
   LogFormat * m_format;
-  LogFile *m_logFile;
+  Ptr<LogFile> m_logFile;
   LogFilterList m_filter_list;
   LogHostList m_host_list;