Exemple #1
0
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);
}
Exemple #2
0
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;
}