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);