summaryrefslogtreecommitdiffstats
path: root/src/async.c
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2014-04-25 01:51:36 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2014-04-25 01:51:36 +0200
commit5adfca9b651e0e383d463da9e8158e75cad8e7c7 (patch)
tree906d85ae42ceede085d7c84bf9cdd9e678c03ae7 /src/async.c
parent482ddc46a62b9a6b8bd615fd35b2bac6d3b7d841 (diff)
downloadfastd-5adfca9b651e0e383d463da9e8158e75cad8e7c7.tar
fastd-5adfca9b651e0e383d463da9e8158e75cad8e7c7.zip
Remove ref-counting on remotes
Now that peers have a peer id we can use that to specify a peer in a resolve return. As the remote list of a peer doesn't change without the peer id changing, instead of taking a remote ref we can just use the peer id and remote index.
Diffstat (limited to 'src/async.c')
-rw-r--r--src/async.c27
1 files changed, 7 insertions, 20 deletions
diff --git a/src/async.c b/src/async.c
index f5133f6..cb9ee14 100644
--- a/src/async.c
+++ b/src/async.c
@@ -44,28 +44,15 @@ void fastd_async_init(void) {
static void handle_resolve_return(const void *buf) {
const fastd_async_resolve_return_t *resolve_return = buf;
- size_t i;
- for (i = 0; i < VECTOR_LEN(ctx.peers); i++) {
- fastd_peer_t *peer = VECTOR_INDEX(ctx.peers, i);
+ fastd_peer_t *peer = fastd_peer_find_by_id(resolve_return->peer_id);
+ if (!peer)
+ return;
- if (!peer->config)
- continue;
+ if (!peer->config)
+ exit_bug("resolve return for temporary peer");
- fastd_remote_t *remote;
- for (remote = peer->remotes; remote; remote = remote->next) {
- if (remote == resolve_return->remote)
- break;
- }
-
- if (!remote)
- continue;
-
- fastd_peer_handle_resolve(peer, remote, resolve_return->n_addr, resolve_return->addr);
-
- break;
- }
-
- fastd_remote_unref(resolve_return->remote);
+ fastd_remote_t *remote = &VECTOR_INDEX(peer->remotes, resolve_return->remote);
+ fastd_peer_handle_resolve(peer, remote, resolve_return->n_addr, resolve_return->addr);
}
void fastd_async_handle(void) {