diff options
Diffstat (limited to 'src/ipcpd/normal/dht.c')
-rw-r--r-- | src/ipcpd/normal/dht.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/ipcpd/normal/dht.c b/src/ipcpd/normal/dht.c index b79d9480..74618658 100644 --- a/src/ipcpd/normal/dht.c +++ b/src/ipcpd/normal/dht.c @@ -827,13 +827,6 @@ static enum lookup_state lookup_wait(struct lookup * lu) pthread_cleanup_pop(false); - if (lu->state == LU_DESTROY) { - lu->state = LU_NULL; - pthread_cond_signal(&lu->cond); - pthread_mutex_unlock(&lu->lock); - return -1; - } - state = lu->state; pthread_mutex_unlock(&lu->lock); @@ -1320,7 +1313,7 @@ static int send_msg(struct dht * dht, ipcp_sdb_release(sdb); #endif /* __DHT_TEST__ */ - if (msg->code < KAD_STORE) { + if (msg->code < KAD_STORE && dht->state != DHT_SHUTDOWN) { req = kad_req_create(dht, msg, addr); if (req != NULL) list_add(&req->next, &dht->requests); @@ -1364,7 +1357,7 @@ static int kad_add(struct dht * dht, pthread_rwlock_wrlock(&dht->lock); - while (--n >= 0) { + while (n-- > 0) { if (contacts[n].id.len != dht->b) log_warn("Bad key length in contact data."); @@ -1478,6 +1471,7 @@ static void lookup_set_state(struct lookup * lu, pthread_mutex_lock(&lu->lock); lu->state = state; + pthread_cond_signal(&lu->cond); pthread_mutex_unlock(&lu->lock); } @@ -1526,6 +1520,9 @@ static struct lookup * kad_lookup(struct dht * dht, kad_find(dht, id, addrs, code); break; case LU_DESTROY: + pthread_rwlock_wrlock(&dht->lock); + list_del(&lu->next); + pthread_rwlock_unlock(&dht->lock); lookup_set_state(lu, LU_NULL); return NULL; default: @@ -1560,7 +1557,7 @@ static void kad_publish(struct dht * dht, n = lookup_contact_addrs(lu, addrs); - while (--n > 0) { + while (n-- > 0) { if (addrs[n] == dht->addr) { kad_contact_msg_t msg = KAD_CONTACT_MSG__INIT; msg.id.data = (uint8_t *) key; @@ -1932,7 +1929,6 @@ static int kad_handle_find_resp(struct dht * dht, lu = dht_find_lookup(dht, req->key); if (lu == NULL) { - log_dbg("Response for unknown lookup."); pthread_rwlock_unlock(&dht->lock); return -1; } @@ -1974,8 +1970,7 @@ static void kad_handle_response(struct dht * dht, case KAD_FIND_NODE: if (dht_get_state(dht) != DHT_RUNNING) return; - if (kad_handle_find_resp(dht, req, msg)) - log_dbg("Invalid or outdated response."); + kad_handle_find_resp(dht, req, msg); break; default: break; @@ -2265,8 +2260,10 @@ void dht_post_sdu(void * ae, pthread_rwlock_unlock(&dht->lock); } - if (msg->code < KAD_STORE) - send_msg(dht, &resp_msg, addr); + if (msg->code < KAD_STORE) { + if (send_msg(dht, &resp_msg, addr)) + log_warn("Failed to send response."); + } kad_msg__free_unpacked(msg, NULL); |