[svn] commit: r3714 - in /branches/trac408/src/lib/nsas: tests/zone_entry_unittest.cc zone_entry.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Dec 3 21:32:44 UTC 2010
Author: vorner
Date: Fri Dec 3 21:32:37 2010
New Revision: 3714
Log:
Fix missing callback
Modified:
branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc
branches/trac408/src/lib/nsas/zone_entry.cc
Modified: branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc
==============================================================================
--- branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc (original)
+++ branches/trac408/src/lib/nsas/tests/zone_entry_unittest.cc Fri Dec 3 21:32:37 2010
@@ -160,9 +160,9 @@
EXPECT_NO_THROW(resolver_->answer(2, ns_name_, RRType::AAAA(),
rdata::in::AAAA("2001:db8::1")));
// This should answer the third callback
+ EXPECT_EQ(0, callback_->unreachable_count_);
ASSERT_EQ(3, callback_->successes_.size());
EXPECT_TRUE(IOAddress("2001:db8::1").equal(callback_->successes_[2]));
- EXPECT_EQ(0, callback_->unreachable_count_);
// It should think it is ready
EXPECT_EQ(Fetchable::READY, zone->getState());
// When we ask something more, it should be answered right away
Modified: branches/trac408/src/lib/nsas/zone_entry.cc
==============================================================================
--- branches/trac408/src/lib/nsas/zone_entry.cc (original)
+++ branches/trac408/src/lib/nsas/zone_entry.cc Fri Dec 3 21:32:37 2010
@@ -296,6 +296,10 @@
process(CallbackPtr(), V4_ONLY, nameserver, self, lock);
process(CallbackPtr(), V6_ONLY, nameserver, self, lock);
} else {
+ // Nothing to do anyway for this family, be dormant
+ if (callbacks_[family].empty()) {
+ return;
+ }
/*
* Check that we are only in one process call on stack.
* It eliminates the problem when there are multiple nameserver
@@ -341,8 +345,13 @@
// We should not be locked, because this function can
// be called directly from the askIP again
lock->unlock();
- shared_ptr<NameserverCallback> ns_callback(new
- NameserverCallback(self, family));
+ shared_ptr<NameserverCallback> ns_callbacks[ADDR_REQ_MAX];;
+ ns_callbacks[ANY_OK].reset(new NameserverCallback(self,
+ ANY_OK));
+ ns_callbacks[V4_ONLY].reset(new NameserverCallback(self,
+ V4_ONLY));
+ ns_callbacks[V6_ONLY].reset(new NameserverCallback(self,
+ V6_ONLY));
/*
* TODO: Possible place for an optimisation. We now ask
* everything we can. We should limit this to something like
@@ -351,7 +360,17 @@
* away is simpler.
*/
BOOST_FOREACH(const NameserverPtr& ns, to_ask) {
- ns->askIP(resolver_, ns_callback, family, ns);
+ // Put all 3 callbacks there. If we put just the
+ // current family, it might not work due to missing
+ // callback for different one.
+ // If they recurse back to us (call directly), we kill
+ // it by the in_process_
+ ns->askIP(resolver_, ns_callbacks[V4_ONLY], V4_ONLY,
+ ns);
+ ns->askIP(resolver_, ns_callbacks[V6_ONLY], V6_ONLY,
+ ns);
+ ns->askIP(resolver_, ns_callbacks[ANY_OK], ANY_OK,
+ ns);
}
// Retry with all the data that might have arrived
in_process_[family] = false;
More information about the bind10-changes
mailing list