You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by du...@apache.org on 2019/01/09 17:18:31 UTC

[trafficserver] branch master updated: fix NXDOMAIN problems

This is an automated email from the ASF dual-hosted git repository.

duke8253 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new 792a022  fix NXDOMAIN problems
792a022 is described below

commit 792a02222b0cebca2807e98ad75caa79b677132c
Author: Fei Deng <du...@gmail.com>
AuthorDate: Mon Dec 24 10:44:09 2018 -0600

    fix NXDOMAIN problems
---
 iocore/hostdb/HostDB.cc | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index 6e50c44..de09e91 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -441,6 +441,7 @@ HostDBContinuation::init(HostDBHash const &the_hash, Options const &opt)
     action = opt.cont;
   } else {
     // ink_assert(!"this sucks");
+    ink_zero(action);
     action.mutex = mutex;
   }
 }
@@ -1591,10 +1592,10 @@ HostDBContinuation::probeEvent(int /* event ATS_UNUSED */, Event *e)
   EThread *t = e ? e->ethread : this_ethread();
 
   MUTEX_TRY_LOCK(lock, action.mutex, t);
-  // Go ahead and grab the continuation mutex or just grab the action mutex again of there is no continuation mutex
-  MUTEX_TRY_LOCK(lock2, (action.continuation && action.continuation->mutex) ? action.continuation->mutex : action.mutex, t);
-  // Don't continue unless we have both mutexes
-  if (!lock.is_locked() || !lock2.is_locked()) {
+
+  // Separating lock checks here to make sure things don't break
+  // when we check if the action is cancelled.
+  if (!lock.is_locked()) {
     mutex->thread_holding->schedule_in(this, HOST_DB_RETRY_PERIOD);
     return EVENT_CONT;
   }
@@ -1604,6 +1605,14 @@ HostDBContinuation::probeEvent(int /* event ATS_UNUSED */, Event *e)
     return EVENT_DONE;
   }
 
+  // Go ahead and grab the continuation mutex or just grab the action mutex again of there is no continuation mutex
+  MUTEX_TRY_LOCK(lock2, (action.continuation && action.continuation->mutex) ? action.continuation->mutex : action.mutex, t);
+  // Don't continue unless we have both mutexes
+  if (!lock2.is_locked()) {
+    mutex->thread_holding->schedule_in(this, HOST_DB_RETRY_PERIOD);
+    return EVENT_CONT;
+  }
+
   if (!hostdb_enable || (!*hash.host_name && !hash.ip.isValid())) {
     if (action.continuation) {
       action.continuation->handleEvent(EVENT_HOST_DB_LOOKUP, nullptr);