summaryrefslogtreecommitdiff
path: root/src/ipcpd/unicast/dir/dht.c
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2026-08-16 18:05:20 +0000
committerSander Vrijders <sander@ouroboros.rocks>2026-08-31 08:31:45 +0200
commit657fdee8e909bd50fcc0b809b454cf1ad551384b (patch)
treeef6f2cfa3abacfe2ff33279f6af034358033a0a1 /src/ipcpd/unicast/dir/dht.c
parent2e06d9b85f2e2eadd94ade6b36d0aa2835a20ce2 (diff)
downloadouroboros-657fdee8e909bd50fcc0b809b454cf1ad551384b.tar.gz
ouroboros-657fdee8e909bd50fcc0b809b454cf1ad551384b.zip
ipcpd: Fix next value iteration in DHT
There was a bug in the loop where only the last entry was checked. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/ipcpd/unicast/dir/dht.c')
-rw-r--r--src/ipcpd/unicast/dir/dht.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/ipcpd/unicast/dir/dht.c b/src/ipcpd/unicast/dir/dht.c
index c2cd33aa..9d60ce30 100644
--- a/src/ipcpd/unicast/dir/dht.c
+++ b/src/ipcpd/unicast/dir/dht.c
@@ -3512,7 +3512,7 @@ static int dht_kv_next_values(uint8_t * key,
struct timespec now;
struct list_head * p;
struct list_head * h;
- struct dht_entry * e = NULL;
+ struct dht_entry * e;
assert(key != NULL);
assert(repl != NULL);
@@ -3525,20 +3525,19 @@ static int dht_kv_next_values(uint8_t * key,
pthread_rwlock_rdlock(&dht.db.lock);
- if (llist_is_empty(&dht.db.kv.ll))
- goto no_entries;
-
llist_for_each_safe(p, h, &dht.db.kv.ll) {
e = list_entry(p, struct dht_entry, next);
- if (IS_CLOSER(e->key, key))
+ if (!IS_CLOSER(key, e->key))
continue; /* Already processed */
- }
- if (e != NULL) {
memcpy(key, e->key, dht.id.len);
+
dht_entry_get_repl_lists(e, repl, rebl, &now);
+
+ if (!list_is_empty(repl) || !list_is_empty(rebl))
+ break;
}
- no_entries:
+
pthread_rwlock_unlock(&dht.db.lock);
return list_is_empty(repl) && list_is_empty(rebl) ? -ENOENT : 0;