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/iomux.h>
#include <ucore/utils.h> #include <ucore/utils.h>
#include <ucore/pack.h> #include <ucore/pack.h>
#include <ucore/tailq.h>
#define HB_MAGIX 0xBEA7BEA7 #define HB_MAGIX 0xBEA7BEA7
@@ -54,12 +55,14 @@ struct HBPeer {
struct sockaddr_in peer_addr; struct sockaddr_in peer_addr;
time_t last_ok; time_t last_ok;
enum PeerState state; enum PeerState state;
TAILQ_ENTRY(HBPeer) entry; //TAILQ_ENTRY(HBPeer) entry;
struct TailQ entry;
}; };
struct HBContext { struct HBContext {
struct IOMuxFD sock_fd; struct IOMuxFD sock_fd;
TAILQ_HEAD(, HBPeer) peers; //TAILQ_HEAD(, HBPeer) peers;
struct TailQ peers; //of HBPeer
struct IOMux *mux; struct IOMux *mux;
}; };
@@ -91,14 +94,15 @@ void peer_add_addr(struct HBContext *ctx, const struct sockaddr_in *addr)
int usec; int usec;
if (peer != NULL) { 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); inet_ntoa(addr->sin_addr), addr->sin_port);
return; return;
} }
peer = calloc(1, sizeof *peer); peer = calloc(1, sizeof *peer);
peer->peer_addr = *addr; 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.callback = peer_timer_cb;
peer->timer.cookie_ptr = ctx; 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 *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 if (peer_addr->sin_addr.s_addr == peer->peer_addr.sin_addr.s_addr
&& peer_addr->sin_port == peer->peer_addr.sin_port) { && 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) 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; return;
} }
TAILQ_INIT(&ctx->peers); uc_tailq_init(&ctx->peers);
ctx->sock_fd.fd = sock_fd; ctx->sock_fd.fd = sock_fd;
ctx->sock_fd.what = MUX_EV_READ; ctx->sock_fd.what = MUX_EV_READ;