{
struct auth_zone* z;
char tmpfile[1024];
+ lock_basic_unlock(&xfr->lock);
/* get lock again, so it is a readlock and concurrently queries
* can be answered */
if(!z) {
lock_rw_unlock(&env->auth_zones->lock);
/* the zone is gone, ignore xfr results */
+ lock_basic_lock(&xfr->lock);
return;
}
lock_rw_rdlock(&z->lock);
+ lock_basic_lock(&xfr->lock);
lock_rw_unlock(&env->auth_zones->lock);
if(z->zonefile == NULL) {
e->entry.key = e;
e->entry.data = r;
lock_rw_init(&e->entry.lock);
- lock_protect(&e->entry.lock, &e->key, sizeof(e->key));
+ lock_protect(&e->entry.lock, &e->key.qname, sizeof(e->key.qname));
+ lock_protect(&e->entry.lock, &e->key.qname_len, sizeof(e->key.qname_len));
+ lock_protect(&e->entry.lock, &e->key.qtype, sizeof(e->key.qtype));
+ lock_protect(&e->entry.lock, &e->key.qclass, sizeof(e->key.qclass));
+ lock_protect(&e->entry.lock, &e->key.local_alias, sizeof(e->key.local_alias));
lock_protect(&e->entry.lock, &e->entry.hash, sizeof(e->entry.hash));
lock_protect(&e->entry.lock, &e->entry.key, sizeof(e->entry.key));
lock_protect(&e->entry.lock, &e->entry.data, sizeof(e->entry.data));