When starting priming from dns_view_find(), the dns_view shutdown could
be initiated by different thread, detaching from the resolver. Use
dns_view_getresolver() to attach to the resolver under view->lock, so we
don't try to call dns_resolver_prime() with NULL pointer.
There are more accesses to view->resolver, (and also view->adb and
view->requestmgr that suffer from the same problem) in the dns_view
module, but they are all done in exclusive mode or under a view->lock.
* We just used a hint. Let the resolver know it
* should consider priming.
*/
- dns_resolver_prime(view->resolver);
- dns_db_attach(view->hints, &db);
- result = DNS_R_HINT;
+ dns_resolver_t *res = NULL;
+ result = dns_view_getresolver(view, &res);
+ if (result == ISC_R_SUCCESS) {
+ dns_resolver_prime(res);
+ dns_db_attach(view->hints, &db);
+ dns_resolver_detach(&res);
+ result = DNS_R_HINT;
+ }
} else if (result == DNS_R_NXRRSET) {
dns_db_attach(view->hints, &db);
result = DNS_R_HINTNXRRSET;