static void close_down(void) { struct sigaction sa; /* We are going down. Give the event thread a chance to shutdown. Just in case it hangs, set a timer to get us out of trouble. */ sa.sa_flags = 0 ; sigemptyset( &sa.sa_mask ) ; sa.sa_handler = thread_killer; sigaction( SIGALRM, &sa, NULL ); shutdown_events(); }
static int run_client(void) { int i, ret, ret2; printf("cmatose: starting client\n"); printf("cmatose: connecting\n"); for (i = 0; i < connections; i++) { ret = fi_connect(nodes[i].ep, info->dest_addr, NULL, 0); if (ret) { FT_PRINTERR("fi_connect", ret); connects_left--; return ret; } } ret = connect_events(); if (ret) goto disc; if (hints->tx_attr->size) { printf("receiving data transfers\n"); ret = poll_cqs(RECV_CQ_INDEX); if (ret) goto disc; printf("sending replies\n"); for (i = 0; i < connections; i++) { ret = post_sends(nodes + i); if (ret) goto disc; } printf("completing sends\n"); ret = poll_cqs(SEND_CQ_INDEX); if (ret) goto disc; printf("data transfers complete\n"); } ret = 0; disc: ret2 = shutdown_events(); printf("disconnected\n"); if (ret2) ret = ret2; return ret; }
static int run_server(void) { int i, ret; printf("cmatose: starting server\n"); ret = fi_passive_ep(fabric, info, &pep, NULL); if (ret) { FT_PRINTERR("fi_passive_ep", ret); return ret; } ret = fi_pep_bind(pep, &eq->fid, 0); if (ret) { FT_PRINTERR("fi_ep_bind", ret); goto out; } ret = fi_listen(pep); if (ret) { FT_PRINTERR("fi_listen", ret); goto out; } ret = connect_events(); if (ret) goto out; if (hints->tx_attr->size) { printf("initiating data transfers\n"); for (i = 0; i < connections; i++) { ret = post_sends(&nodes[i]); if (ret) goto out; } printf("completing sends\n"); ret = poll_cqs(SEND_CQ_INDEX); if (ret) goto out; printf("receiving data transfers\n"); ret = poll_cqs(RECV_CQ_INDEX); if (ret) goto out; printf("data transfers complete\n"); } printf("cmatose: disconnecting\n"); for (i = 0; i < connections; i++) { if (!nodes[i].connected) continue; nodes[i].connected = 0; fi_shutdown(nodes[i].ep, 0); } ret = shutdown_events(); printf("disconnected\n"); out: fi_close(&pep->fid); return ret; }