コード例 #1
0
ファイル: net.c プロジェクト: aido/picocoin
void nc_conns_gc(struct net_child_info *nci, bool free_all)
{
	clist *dead = NULL;
	unsigned int n_gc = 0;

	/* build list of dead connections */
	unsigned int i;
	for (i = 0; i < nci->conns->len; i++) {
		struct nc_conn *conn = parr_idx(nci->conns, i);
		if (free_all || conn->dead)
			dead = clist_prepend(dead, conn);
	}

	/* remove and free dead connections */
	clist *tmp = dead;
	while (tmp) {
		struct nc_conn *conn = tmp->data;
		tmp = tmp->next;

		parr_remove(nci->conns, conn);
		nc_conn_free(conn);
		n_gc++;
	}

	clist_free(dead);

	log_debug("net: gc'd %u connections", n_gc);
}
コード例 #2
0
static int try_build_part(struct mailimap_body * root_part,
    struct mailimap_body * part, uint32_t count,
    clist ** result)
{
  int r;
  clist * imap_id_list;
  uint32_t * id;
  
  r = recursive_build_path(root_part, part, &imap_id_list);
  if (r != MAILIMAP_NO_ERROR)
    return r;
  
  id = malloc(sizeof(* id));
  if (id == NULL) {
    clist_free(imap_id_list);
    return MAILIMAP_ERROR_MEMORY;
  }
  
  * id = count;
        
  r = clist_prepend(imap_id_list, id);
  if (r < 0) {
    free(id);
    clist_free(imap_id_list);
    return MAILIMAP_ERROR_MEMORY;
  }
        
  * result = imap_id_list;
        
  return MAILIMAP_NO_ERROR;
}
コード例 #3
0
ファイル: peerman.c プロジェクト: aido/picocoin
static void __peerman_add(struct peer_manager *peers, struct peer *peer,
			  bool prepend_front)
{
	bn_group(peer->group, &peer->group_len, peer->addr.ip);

	if (prepend_front)
		peers->addrlist = clist_prepend(peers->addrlist, peer);
	else
		peers->addrlist = clist_append(peers->addrlist, peer);

	bp_hashtab_put(peers->map_addr, peer->addr.ip, peer);
}
コード例 #4
0
ファイル: brd.c プロジェクト: gitter-badger/picocoin
static void nc_conns_gc(struct net_child_info *nci, bool free_all)
{
	clist *dead = NULL;
	unsigned int n_gc = 0;
        
	/*nr of dead connections*/
	size_t nr_dead = 0;

	/* build list of dead connections */
	unsigned int i;
	for (i = 0; i < nci->conns->len; i++) {
		struct nc_conn *conn = parr_idx(nci->conns, i);
		if (free_all || conn->dead)
			dead = clist_prepend(dead, conn);
	}
        
	nr_dead = clist_length( dead );
	
	if (nr_dead){
		LOG("Nr of dead connections:%d\n", nr_dead);
	}

	/* remove and free dead connections */
	clist *tmp = dead;
	while (tmp) {
		struct nc_conn *conn = tmp->data;
		tmp = tmp->next;

		parr_remove(nci->conns, conn);
		nc_conn_free(conn);
		n_gc++;
	}

	clist_free(dead);

	if (debugging)
		fprintf(plog, "net: gc'd %u connections\n", n_gc);
}