static void init_nci(struct net_child_info *nci) { memset(nci, 0, sizeof(*nci)); nci->read_fd = -1; nci->write_fd = -1; init_peers(nci); nci->conns = parr_new(NC_MAX_CONN, NULL); nci->eb = event_base_new(); }
static puzzle_t *create_puzzle(unsigned char vals[9][9]) { puzzle_t *puz = malloc(sizeof(puzzle_t)); int x, y; for (x = 0; x < NUM_DIGITS; x++) { for (y = 0; y < NUM_DIGITS; y++) { set_init_vals(puz, x, y, vals[x][y]); init_peers(puz, x, y); } } return puz; }
static puzzle_t *copy_puzzle(puzzle_t *puz) { puzzle_t *new_puz = malloc(sizeof(puzzle_t)); new_puz = memcpy(new_puz, puz, sizeof(puzzle_t)); // then re-initialize peers int x,y; for (x=0; x < NUM_COLS; x++) { for (y = 0; y < NUM_ROWS; y++) { init_peers(new_puz, x, y); } } return new_puz; }
/** * init_plugin initialise internal data * * if we are server, try to bind and launch a thread to accept * launch the thread of receive data * * @param net_plugin Info on the new instance that we will fill * * @return EXA_SUCCESS or error */ int algopr_init_plugin(exa_nodeid_t node_id, int max_buffer_size) { struct sockaddr_in serv_addr; int retval = -NBD_ERR_MALLOC_FAILED; int i; EXA_ASSERT(EXA_NODEID_VALID(node_id)); this_node_id = node_id; init_peers(); eth.max_buffer_size = max_buffer_size + max_buffer_size; wq_init(ð.wq_send); nbd_init_root(MAX_BIG_RECV_ELT, eth.max_buffer_size, ð.root_list_big_recv); nbd_init_root(MAX_SEND_ELT, sizeof(payload_t), ð.root_list_send); for (i = 0; i < EXA_MAX_NODES_NUMBER; i++) nbd_init_list(ð.root_list_send, ð.send_list[i]); algopr_run = true; if (!exathread_create_named(ð.receive_thread, NBD_THREAD_STACK_SIZE + MIN_THREAD_STACK_SIZE_OF_THIS_PLUGIN, algopr_receive_thread, NULL, "AlgoPrRcv")) return -NBD_ERR_THREAD_CREATION; if (!exathread_create_named(ð.send_thread, NBD_THREAD_STACK_SIZE + MIN_THREAD_STACK_SIZE_OF_THIS_PLUGIN, algopr_send_thread, NULL, "AlgoPrSnd")) return -NBD_ERR_THREAD_CREATION; eth.accept_sock = os_socket(PF_INET, SOCK_STREAM, 0); if (eth.accept_sock < 0) return -EXA_ERR_CREATE_SOCKET; /* bind a socket to SERVERD_DATA_PORT port and make it listen for incoming * connections */ serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(algopr_network_port); retval = internal_setsock_opt(eth.accept_sock, SOCK_LISTEN_FLAGS); if (retval != EXA_SUCCESS) return retval; if (os_bind(eth.accept_sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) return -EXA_ERR_CREATE_SOCKET; if (os_listen(eth.accept_sock, EXA_MAX_NODES_NUMBER) < 0) return -EXA_ERR_CREATE_SOCKET; if (!exathread_create_named(ð.accept_thread, NBD_THREAD_STACK_SIZE + MIN_THREAD_STACK_SIZE_OF_THIS_PLUGIN, accept_thread, NULL, "servEthAccPlugin")) return -NBD_ERR_THREAD_CREATION; return EXA_SUCCESS; }