void fq_client_publish(fq_client conn, fq_msg *msg) { fq_conn_s *conn_s = conn; ck_fifo_mpmc_entry_t *fifo_entry; while(conn_s->qlen > conn_s->qmaxlen) { if(conn_s->q_stall_time > 0) usleep(conn_s->q_stall_time); else ck_pr_stall(); } fifo_entry = malloc(sizeof(ck_fifo_mpmc_entry_t)); fq_msg_ref(msg); ck_fifo_mpmc_enqueue(&conn_s->q, fifo_entry, msg); ck_pr_inc_uint(&conn_s->qlen); }
static bool fqd_peer_message_hook(fq_client conn, fq_msg *m) { int i; uint32_t me = fqd_config_get_nodeid(); fqd_peer_connection *peer; peer = fq_client_get_userdata(conn); for(i=MAX_HOPS-1;i>0;i--) { if(m->hops[i] == me) { fq_debug(FQ_DEBUG_PEER, "recieved looped message"); return true; } m->hops[i] = m->hops[i-1]; } m->hops[0] = fqd_config_get_nodeid(); /* route this */ fq_msg_ref(m); fqd_inject_message(peer ? peer->stats_holder : NULL, m); return true; }