diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2014-04-25 01:51:36 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2014-04-25 01:51:36 +0200 |
commit | 5adfca9b651e0e383d463da9e8158e75cad8e7c7 (patch) | |
tree | 906d85ae42ceede085d7c84bf9cdd9e678c03ae7 /src/async.c | |
parent | 482ddc46a62b9a6b8bd615fd35b2bac6d3b7d841 (diff) | |
download | fastd-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.c | 27 |
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) { |