Use UC_TAILQ in udp_heartbeat

This commit is contained in:
Nils O. Selåsdal
2013-12-10 23:08:05 +01:00
parent 2dc5242fc0
commit a681e9044f
+14 -9
View File
@@ -17,6 +17,7 @@
#include <ucore/iomux.h>
#include <ucore/utils.h>
#include <ucore/pack.h>
#include <ucore/tailq.h>
#define HB_MAGIX 0xBEA7BEA7
@@ -54,12 +55,14 @@ struct HBPeer {
struct sockaddr_in peer_addr;
time_t last_ok;
enum PeerState state;
TAILQ_ENTRY(HBPeer) entry;
//TAILQ_ENTRY(HBPeer) entry;
struct TailQ entry;
};
struct HBContext {
struct IOMuxFD sock_fd;
TAILQ_HEAD(, HBPeer) peers;
//TAILQ_HEAD(, HBPeer) peers;
struct TailQ peers; //of HBPeer
struct IOMux *mux;
};
@@ -91,14 +94,15 @@ void peer_add_addr(struct HBContext *ctx, const struct sockaddr_in *addr)
int usec;
if (peer != NULL) {
UC_LOGF(UC_LL_INFO, LMAIN, "Ignorming adding existing peer %s:%u\n",
UC_LOGF(UC_LL_INFO, LMAIN, "Ignoring adding existing peer %s:%u\n",
inet_ntoa(addr->sin_addr), addr->sin_port);
return;
}
peer = calloc(1, sizeof *peer);
peer->peer_addr = *addr;
TAILQ_INSERT_TAIL(&ctx->peers, peer, entry);
//TAILQ_INSERT_TAIL(&ctx->peers, peer, entry);
uc_tailq_insert_tail(&ctx->peers, &peer->entry);
peer->timer.callback = peer_timer_cb;
peer->timer.cookie_ptr = ctx;
@@ -143,16 +147,17 @@ void peer_send(struct HBContext *ctx, struct HBPeer *peer)
struct HBPeer *hb_peer_find(struct HBContext *ctx, const struct sockaddr_in *peer_addr)
{
struct HBPeer *peer;
struct HBPeer *peer = NULL;
TAILQ_FOREACH(peer, &ctx->peers, entry) {
UC_TAILQ_FOREACH_CONTAINER(peer, entry, &ctx->peers) {
if (peer_addr->sin_addr.s_addr == peer->peer_addr.sin_addr.s_addr
&& peer_addr->sin_port == peer->peer_addr.sin_port) {
break;
return peer;
}
}
return peer;
return NULL;
}
void peer_do_state(struct HBPeer *peer, enum PeerEvent event)
@@ -243,7 +248,7 @@ void init_hb_context(struct HBContext *ctx, uint16_t local_port)
return;
}
TAILQ_INIT(&ctx->peers);
uc_tailq_init(&ctx->peers);
ctx->sock_fd.fd = sock_fd;
ctx->sock_fd.what = MUX_EV_READ;