Use UC_TAILQ in udp_heartbeat
This commit is contained in:
+14
-9
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user