You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2016/02/04 01:48:54 UTC

trafficserver git commit: TS-3863: Add support for ASAN leak detection

Repository: trafficserver
Updated Branches:
  refs/heads/master dc0561c4d -> d8bc5089b


TS-3863: Add support for ASAN leak detection

This closes #453


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

Branch: refs/heads/master
Commit: d8bc5089b265574adf2d1ea3d904823eb9c4c30a
Parents: dc0561c
Author: Bryan Call <bc...@apache.org>
Authored: Wed Feb 3 16:48:35 2016 -0800
Committer: Bryan Call <bc...@apache.org>
Committed: Wed Feb 3 16:48:35 2016 -0800

----------------------------------------------------------------------
 iocore/aio/AIO.cc                 | 4 ++++
 iocore/eventsystem/I_EThread.h    | 2 ++
 iocore/eventsystem/UnixEThread.cc | 5 +++++
 iocore/net/UnixNetAccept.cc       | 2 +-
 lib/ts/EventNotify.cc             | 2 +-
 mgmt/ProcessManager.cc            | 3 +++
 proxy/Main.cc                     | 5 ++++-
 proxy/logging/Log.cc              | 6 ++++++
 8 files changed, 26 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/d8bc5089/iocore/aio/AIO.cc
----------------------------------------------------------------------
diff --git a/iocore/aio/AIO.cc b/iocore/aio/AIO.cc
index 5fbeef7..cf6784f 100644
--- a/iocore/aio/AIO.cc
+++ b/iocore/aio/AIO.cc
@@ -458,6 +458,10 @@ aio_thread_main(void *arg)
   ink_mutex_acquire(&my_aio_req->aio_mutex);
   for (;;) {
     do {
+      if (unlikely(shutdown_event_system == true)) {
+        ink_mutex_release(&my_aio_req->aio_mutex);
+        return 0;
+      }
       current_req = my_aio_req;
       /* check if any pending requests on the atomic list */
       if (!INK_ATOMICLIST_EMPTY(my_aio_req->aio_temp_list))

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/d8bc5089/iocore/eventsystem/I_EThread.h
----------------------------------------------------------------------
diff --git a/iocore/eventsystem/I_EThread.h b/iocore/eventsystem/I_EThread.h
index c348217..4618360 100644
--- a/iocore/eventsystem/I_EThread.h
+++ b/iocore/eventsystem/I_EThread.h
@@ -56,6 +56,8 @@ enum ThreadType {
   DEDICATED,
 };
 
+extern bool shutdown_event_system;
+
 
 /**
   Event System specific type of thread.

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/d8bc5089/iocore/eventsystem/UnixEThread.cc
----------------------------------------------------------------------
diff --git a/iocore/eventsystem/UnixEThread.cc b/iocore/eventsystem/UnixEThread.cc
index fb3af43..e178930 100644
--- a/iocore/eventsystem/UnixEThread.cc
+++ b/iocore/eventsystem/UnixEThread.cc
@@ -39,6 +39,8 @@ struct AIOCallback;
 #define THREAD_MAX_HEARTBEAT_MSECONDS 60
 #define NO_ETHREAD_ID -1
 
+bool shutdown_event_system = false;
+
 EThread::EThread()
   : generator((uint64_t)ink_get_hrtime_internal() ^ (uint64_t)(uintptr_t) this), ethreads_to_be_signalled(NULL),
     n_ethreads_to_be_signalled(0), main_accept_index(-1), id(NO_ETHREAD_ID), event_types(0), signal_hook(0), tt(REGULAR)
@@ -168,6 +170,9 @@ EThread::execute()
 
     // give priority to immediate events
     for (;;) {
+      if (unlikely(shutdown_event_system == true)) {
+        return;
+      }
       // execute all the available external events that have
       // already been dequeued
       cur_time = ink_get_based_hrtime_internal();

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/d8bc5089/iocore/net/UnixNetAccept.cc
----------------------------------------------------------------------
diff --git a/iocore/net/UnixNetAccept.cc b/iocore/net/UnixNetAccept.cc
index 37ee6de..7096f7c 100644
--- a/iocore/net/UnixNetAccept.cc
+++ b/iocore/net/UnixNetAccept.cc
@@ -273,7 +273,7 @@ NetAccept::do_blocking_accept(EThread *t)
 
     // Use 'NULL' to Bypass thread allocator
     vc = (UnixNetVConnection *)this->getNetProcessor()->allocate_vc(NULL);
-    if (!vc) {
+    if (unlikely(!vc || shutdown_event_system == true)) {
       con.close();
       return -1;
     }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/d8bc5089/lib/ts/EventNotify.cc
----------------------------------------------------------------------
diff --git a/lib/ts/EventNotify.cc b/lib/ts/EventNotify.cc
index 28b509c..8cff3fc 100644
--- a/lib/ts/EventNotify.cc
+++ b/lib/ts/EventNotify.cc
@@ -92,7 +92,7 @@ EventNotify::wait(void)
   struct epoll_event ev;
 
   do {
-    nr_fd = epoll_wait(m_epoll_fd, &ev, 1, -1);
+    nr_fd = epoll_wait(m_epoll_fd, &ev, 1, 500000);
   } while (nr_fd == -1 && errno == EINTR);
 
   if (nr_fd == -1)

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/d8bc5089/mgmt/ProcessManager.cc
----------------------------------------------------------------------
diff --git a/mgmt/ProcessManager.cc b/mgmt/ProcessManager.cc
index 74f6041..0dc2300 100644
--- a/mgmt/ProcessManager.cc
+++ b/mgmt/ProcessManager.cc
@@ -56,6 +56,9 @@ startProcessManager(void *arg)
   }
 
   for (;;) {
+    if (unlikely(shutdown_event_system == true)) {
+      return NULL;
+    }
     if (pmgmt->require_lm) {
       pmgmt->pollLMConnection();
     }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/d8bc5089/proxy/Main.cc
----------------------------------------------------------------------
diff --git a/proxy/Main.cc b/proxy/Main.cc
index 45881e3..ee85e23 100644
--- a/proxy/Main.cc
+++ b/proxy/Main.cc
@@ -404,7 +404,10 @@ proxy_signal_handler(int signo, siginfo_t *info, void *)
     return;
   }
 
-  _exit(signo);
+  shutdown_event_system = true;
+  sleep(1);
+
+  exit(signo);
 }
 
 //

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/d8bc5089/proxy/logging/Log.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/Log.cc b/proxy/logging/Log.cc
index bbad5be..aa5468a 100644
--- a/proxy/logging/Log.cc
+++ b/proxy/logging/Log.cc
@@ -1153,6 +1153,9 @@ Log::preproc_thread_main(void *args)
   Log::preproc_notify[idx].lock();
 
   while (true) {
+    if (unlikely(shutdown_event_system == true)) {
+      return NULL;
+    }
     size_t buffers_preproced = 0;
     LogConfig *current = (LogConfig *)configProcessor.get(log_configid);
 
@@ -1195,6 +1198,9 @@ Log::flush_thread_main(void * /* args ATS_UNUSED */)
   Log::flush_notify->lock();
 
   while (true) {
+    if (unlikely(shutdown_event_system == true)) {
+      return NULL;
+    }
     fdata = (LogFlushData *)ink_atomiclist_popall(flush_data_list);
 
     // invert the list