Lines Matching +full:wait +full:- +full:state
15 * - Redistributions of source code must retain the above
19 * - Redistributions in binary form must reproduce the above
104 #define RPING_MSG_FMT "rdma-ping-%d: "
141 enum test_state state; /* used for cond/signalling */ member
164 struct rping_cb *cb = cma_id->context; in rping_cma_event_handler()
167 rdma_event_str(event->event), cma_id, in rping_cma_event_handler()
168 (cma_id == cb->cm_id) ? "parent" : "child"); in rping_cma_event_handler()
170 switch (event->event) { in rping_cma_event_handler()
172 cb->state = ADDR_RESOLVED; in rping_cma_event_handler()
175 cb->state = ERROR; in rping_cma_event_handler()
177 sem_post(&cb->sem); in rping_cma_event_handler()
182 cb->state = ROUTE_RESOLVED; in rping_cma_event_handler()
183 sem_post(&cb->sem); in rping_cma_event_handler()
187 cb->state = CONNECT_REQUEST; in rping_cma_event_handler()
188 cb->child_cm_id = cma_id; in rping_cma_event_handler()
189 DEBUG_LOG("child cma %p\n", cb->child_cm_id); in rping_cma_event_handler()
190 sem_post(&cb->sem); in rping_cma_event_handler()
199 if (!cb->server) { in rping_cma_event_handler()
200 cb->state = CONNECTED; in rping_cma_event_handler()
202 sem_post(&cb->sem); in rping_cma_event_handler()
211 rdma_event_str(event->event), event->status); in rping_cma_event_handler()
212 sem_post(&cb->sem); in rping_cma_event_handler()
213 ret = -1; in rping_cma_event_handler()
218 cb->server ? "server" : "client"); in rping_cma_event_handler()
219 cb->state = DISCONNECTED; in rping_cma_event_handler()
220 sem_post(&cb->sem); in rping_cma_event_handler()
225 cb->state = ERROR; in rping_cma_event_handler()
226 sem_post(&cb->sem); in rping_cma_event_handler()
227 ret = -1; in rping_cma_event_handler()
232 rdma_event_str(event->event)); in rping_cma_event_handler()
241 if (wc->byte_len != sizeof(cb->recv_buf)) { in server_recv()
242 fprintf(stderr, "Received bogus data, size %d\n", wc->byte_len); in server_recv()
243 return -1; in server_recv()
246 cb->remote_rkey = be32toh(cb->recv_buf.rkey); in server_recv()
247 cb->remote_addr = be64toh(cb->recv_buf.buf); in server_recv()
248 cb->remote_len = be32toh(cb->recv_buf.size); in server_recv()
250 cb->remote_rkey, cb->remote_addr, cb->remote_len); in server_recv()
252 if (cb->state <= CONNECTED || cb->state == RDMA_WRITE_COMPLETE) in server_recv()
253 cb->state = RDMA_READ_ADV; in server_recv()
255 cb->state = RDMA_WRITE_ADV; in server_recv()
262 if (wc->byte_len != sizeof(cb->recv_buf)) { in client_recv()
263 fprintf(stderr, "Received bogus data, size %d\n", wc->byte_len); in client_recv()
264 return -1; in client_recv()
267 if (cb->state == RDMA_READ_ADV) in client_recv()
268 cb->state = RDMA_WRITE_ADV; in client_recv()
270 cb->state = RDMA_WRITE_COMPLETE; in client_recv()
282 while ((ret = ibv_poll_cq(cb->cq, 1, &wc)) == 1) { in rping_cq_event_handler()
294 ret = -1; in rping_cq_event_handler()
305 cb->state = RDMA_WRITE_COMPLETE; in rping_cq_event_handler()
306 sem_post(&cb->sem); in rping_cq_event_handler()
311 cb->state = RDMA_READ_COMPLETE; in rping_cq_event_handler()
312 sem_post(&cb->sem); in rping_cq_event_handler()
317 ret = cb->server ? server_recv(cb, &wc) : in rping_cq_event_handler()
324 ret = ibv_post_recv(cb->qp, &cb->rq_wr, &bad_wr); in rping_cq_event_handler()
329 sem_post(&cb->sem); in rping_cq_event_handler()
334 ret = -1; in rping_cq_event_handler()
345 cb->state = ERROR; in rping_cq_event_handler()
346 sem_post(&cb->sem); in rping_cq_event_handler()
356 ret = rdma_accept(cb->child_cm_id, NULL); in rping_accept()
362 sem_wait(&cb->sem); in rping_accept()
363 if (cb->state == ERROR) { in rping_accept()
364 fprintf(stderr, "wait for CONNECTED state %d\n", cb->state); in rping_accept()
365 return -1; in rping_accept()
372 cb->recv_sgl.addr = (uint64_t) (unsigned long) &cb->recv_buf; in rping_setup_wr()
373 cb->recv_sgl.length = sizeof cb->recv_buf; in rping_setup_wr()
374 cb->recv_sgl.lkey = cb->recv_mr->lkey; in rping_setup_wr()
375 cb->rq_wr.sg_list = &cb->recv_sgl; in rping_setup_wr()
376 cb->rq_wr.num_sge = 1; in rping_setup_wr()
378 cb->send_sgl.addr = (uint64_t) (unsigned long) &cb->send_buf; in rping_setup_wr()
379 cb->send_sgl.length = sizeof cb->send_buf; in rping_setup_wr()
380 cb->send_sgl.lkey = cb->send_mr->lkey; in rping_setup_wr()
382 cb->sq_wr.opcode = IBV_WR_SEND; in rping_setup_wr()
383 cb->sq_wr.send_flags = IBV_SEND_SIGNALED; in rping_setup_wr()
384 cb->sq_wr.sg_list = &cb->send_sgl; in rping_setup_wr()
385 cb->sq_wr.num_sge = 1; in rping_setup_wr()
387 cb->rdma_sgl.addr = (uint64_t) (unsigned long) cb->rdma_buf; in rping_setup_wr()
388 cb->rdma_sgl.lkey = cb->rdma_mr->lkey; in rping_setup_wr()
389 cb->rdma_sq_wr.send_flags = IBV_SEND_SIGNALED; in rping_setup_wr()
390 cb->rdma_sq_wr.sg_list = &cb->rdma_sgl; in rping_setup_wr()
391 cb->rdma_sq_wr.num_sge = 1; in rping_setup_wr()
400 cb->recv_mr = ibv_reg_mr(cb->pd, &cb->recv_buf, sizeof cb->recv_buf, in rping_setup_buffers()
402 if (!cb->recv_mr) { in rping_setup_buffers()
407 cb->send_mr = ibv_reg_mr(cb->pd, &cb->send_buf, sizeof cb->send_buf, 0); in rping_setup_buffers()
408 if (!cb->send_mr) { in rping_setup_buffers()
414 cb->rdma_buf = malloc(cb->size); in rping_setup_buffers()
415 if (!cb->rdma_buf) { in rping_setup_buffers()
417 ret = -ENOMEM; in rping_setup_buffers()
421 cb->rdma_mr = ibv_reg_mr(cb->pd, cb->rdma_buf, cb->size, in rping_setup_buffers()
425 if (!cb->rdma_mr) { in rping_setup_buffers()
431 if (!cb->server) { in rping_setup_buffers()
432 cb->start_buf = malloc(cb->size); in rping_setup_buffers()
433 if (!cb->start_buf) { in rping_setup_buffers()
435 ret = -ENOMEM; in rping_setup_buffers()
439 cb->start_mr = ibv_reg_mr(cb->pd, cb->start_buf, cb->size, in rping_setup_buffers()
443 if (!cb->start_mr) { in rping_setup_buffers()
455 free(cb->start_buf); in rping_setup_buffers()
457 ibv_dereg_mr(cb->rdma_mr); in rping_setup_buffers()
459 free(cb->rdma_buf); in rping_setup_buffers()
461 ibv_dereg_mr(cb->send_mr); in rping_setup_buffers()
463 ibv_dereg_mr(cb->recv_mr); in rping_setup_buffers()
470 ibv_dereg_mr(cb->recv_mr); in rping_free_buffers()
471 ibv_dereg_mr(cb->send_mr); in rping_free_buffers()
472 ibv_dereg_mr(cb->rdma_mr); in rping_free_buffers()
473 free(cb->rdma_buf); in rping_free_buffers()
474 if (!cb->server) { in rping_free_buffers()
475 ibv_dereg_mr(cb->start_mr); in rping_free_buffers()
476 free(cb->start_buf); in rping_free_buffers()
491 init_attr.send_cq = cb->cq; in rping_create_qp()
492 init_attr.recv_cq = cb->cq; in rping_create_qp()
494 if (cb->server) { in rping_create_qp()
495 ret = rdma_create_qp(cb->child_cm_id, cb->pd, &init_attr); in rping_create_qp()
497 cb->qp = cb->child_cm_id->qp; in rping_create_qp()
499 ret = rdma_create_qp(cb->cm_id, cb->pd, &init_attr); in rping_create_qp()
501 cb->qp = cb->cm_id->qp; in rping_create_qp()
509 ibv_destroy_qp(cb->qp); in rping_free_qp()
510 ibv_destroy_cq(cb->cq); in rping_free_qp()
511 ibv_destroy_comp_channel(cb->channel); in rping_free_qp()
512 ibv_dealloc_pd(cb->pd); in rping_free_qp()
519 cb->pd = ibv_alloc_pd(cm_id->verbs); in rping_setup_qp()
520 if (!cb->pd) { in rping_setup_qp()
524 DEBUG_LOG("created pd %p\n", cb->pd); in rping_setup_qp()
526 cb->channel = ibv_create_comp_channel(cm_id->verbs); in rping_setup_qp()
527 if (!cb->channel) { in rping_setup_qp()
532 DEBUG_LOG("created channel %p\n", cb->channel); in rping_setup_qp()
534 cb->cq = ibv_create_cq(cm_id->verbs, RPING_SQ_DEPTH * 2, cb, in rping_setup_qp()
535 cb->channel, 0); in rping_setup_qp()
536 if (!cb->cq) { in rping_setup_qp()
541 DEBUG_LOG("created cq %p\n", cb->cq); in rping_setup_qp()
543 ret = ibv_req_notify_cq(cb->cq, 0); in rping_setup_qp()
555 DEBUG_LOG("created qp %p\n", cb->qp); in rping_setup_qp()
559 ibv_destroy_cq(cb->cq); in rping_setup_qp()
561 ibv_destroy_comp_channel(cb->channel); in rping_setup_qp()
563 ibv_dealloc_pd(cb->pd); in rping_setup_qp()
574 ret = rdma_get_cm_event(cb->cm_channel, &event); in cm_thread()
579 ret = rping_cma_event_handler(event->id, event); in cm_thread()
598 ret = ibv_get_cq_event(cb->channel, &ev_cq, &ev_ctx); in cq_thread()
603 if (ev_cq != cb->cq) { in cq_thread()
607 ret = ibv_req_notify_cq(cb->cq, 0); in cq_thread()
613 ibv_ack_cq_events(cb->cq, 1); in cq_thread()
621 struct rping_rdma_info *info = &cb->send_buf; in rping_format_send()
623 info->buf = htobe64((uint64_t) (unsigned long) buf); in rping_format_send()
624 info->rkey = htobe32(mr->rkey); in rping_format_send()
625 info->size = htobe32(cb->size); in rping_format_send()
628 be64toh(info->buf), be32toh(info->rkey), be32toh(info->size)); in rping_format_send()
637 /* Wait for client's Start STAG/TO/Len */ in rping_test_server()
638 sem_wait(&cb->sem); in rping_test_server()
639 if (cb->state != RDMA_READ_ADV) { in rping_test_server()
640 fprintf(stderr, "wait for RDMA_READ_ADV state %d\n", in rping_test_server()
641 cb->state); in rping_test_server()
642 ret = -1; in rping_test_server()
649 cb->rdma_sq_wr.opcode = IBV_WR_RDMA_READ; in rping_test_server()
650 cb->rdma_sq_wr.wr.rdma.rkey = cb->remote_rkey; in rping_test_server()
651 cb->rdma_sq_wr.wr.rdma.remote_addr = cb->remote_addr; in rping_test_server()
652 cb->rdma_sq_wr.sg_list->length = cb->remote_len; in rping_test_server()
654 ret = ibv_post_send(cb->qp, &cb->rdma_sq_wr, &bad_wr); in rping_test_server()
661 /* Wait for read completion */ in rping_test_server()
662 sem_wait(&cb->sem); in rping_test_server()
663 if (cb->state != RDMA_READ_COMPLETE) { in rping_test_server()
664 fprintf(stderr, "wait for RDMA_READ_COMPLETE state %d\n", in rping_test_server()
665 cb->state); in rping_test_server()
666 ret = -1; in rping_test_server()
672 if (cb->verbose) in rping_test_server()
673 printf("server ping data: %s\n", cb->rdma_buf); in rping_test_server()
676 ret = ibv_post_send(cb->qp, &cb->sq_wr, &bad_wr); in rping_test_server()
683 /* Wait for client's RDMA STAG/TO/Len */ in rping_test_server()
684 sem_wait(&cb->sem); in rping_test_server()
685 if (cb->state != RDMA_WRITE_ADV) { in rping_test_server()
686 fprintf(stderr, "wait for RDMA_WRITE_ADV state %d\n", in rping_test_server()
687 cb->state); in rping_test_server()
688 ret = -1; in rping_test_server()
694 cb->rdma_sq_wr.opcode = IBV_WR_RDMA_WRITE; in rping_test_server()
695 cb->rdma_sq_wr.wr.rdma.rkey = cb->remote_rkey; in rping_test_server()
696 cb->rdma_sq_wr.wr.rdma.remote_addr = cb->remote_addr; in rping_test_server()
697 cb->rdma_sq_wr.sg_list->length = strlen(cb->rdma_buf) + 1; in rping_test_server()
699 cb->rdma_sq_wr.sg_list->lkey, in rping_test_server()
700 cb->rdma_sq_wr.sg_list->addr, in rping_test_server()
701 cb->rdma_sq_wr.sg_list->length); in rping_test_server()
703 ret = ibv_post_send(cb->qp, &cb->rdma_sq_wr, &bad_wr); in rping_test_server()
709 /* Wait for completion */ in rping_test_server()
710 ret = sem_wait(&cb->sem); in rping_test_server()
711 if (cb->state != RDMA_WRITE_COMPLETE) { in rping_test_server()
712 fprintf(stderr, "wait for RDMA_WRITE_COMPLETE state %d\n", in rping_test_server()
713 cb->state); in rping_test_server()
714 ret = -1; in rping_test_server()
720 ret = ibv_post_send(cb->qp, &cb->sq_wr, &bad_wr); in rping_test_server()
728 return (cb->state == DISCONNECTED) ? 0 : ret; in rping_test_server()
735 if (cb->sin.ss_family == AF_INET) in rping_bind_server()
736 ((struct sockaddr_in *) &cb->sin)->sin_port = cb->port; in rping_bind_server()
738 ((struct sockaddr_in6 *) &cb->sin)->sin6_port = cb->port; in rping_bind_server()
740 ret = rdma_bind_addr(cb->cm_id, (struct sockaddr *) &cb->sin); in rping_bind_server()
748 ret = rdma_listen(cb->cm_id, 3); in rping_bind_server()
764 cb->child_cm_id->context = cb; in clone_cb()
779 ret = rping_setup_qp(cb, cb->child_cm_id); in rping_persistent_server_thread()
791 ret = ibv_post_recv(cb->qp, &cb->rq_wr, &bad_wr); in rping_persistent_server_thread()
797 ret = pthread_create(&cb->cqthread, NULL, cq_thread, cb); in rping_persistent_server_thread()
810 rdma_disconnect(cb->child_cm_id); in rping_persistent_server_thread()
811 pthread_join(cb->cqthread, NULL); in rping_persistent_server_thread()
814 rdma_destroy_id(cb->child_cm_id); in rping_persistent_server_thread()
818 pthread_cancel(cb->cqthread); in rping_persistent_server_thread()
819 pthread_join(cb->cqthread, NULL); in rping_persistent_server_thread()
840 * Set persistent server threads to DEATCHED state so in rping_run_persistent_server()
855 sem_wait(&listening_cb->sem); in rping_run_persistent_server()
856 if (listening_cb->state != CONNECT_REQUEST) { in rping_run_persistent_server()
857 fprintf(stderr, "wait for CONNECT_REQUEST state %d\n", in rping_run_persistent_server()
858 listening_cb->state); in rping_run_persistent_server()
859 return -1; in rping_run_persistent_server()
864 return -1; in rping_run_persistent_server()
866 ret = pthread_create(&cb->persistent_server_thread, &attr, rping_persistent_server_thread, cb); in rping_run_persistent_server()
884 sem_wait(&cb->sem); in rping_run_server()
885 if (cb->state != CONNECT_REQUEST) { in rping_run_server()
886 fprintf(stderr, "wait for CONNECT_REQUEST state %d\n", in rping_run_server()
887 cb->state); in rping_run_server()
888 return -1; in rping_run_server()
891 ret = rping_setup_qp(cb, cb->child_cm_id); in rping_run_server()
903 ret = ibv_post_recv(cb->qp, &cb->rq_wr, &bad_wr); in rping_run_server()
909 ret = pthread_create(&cb->cqthread, NULL, cq_thread, cb); in rping_run_server()
929 rdma_disconnect(cb->child_cm_id); in rping_run_server()
930 pthread_join(cb->cqthread, NULL); in rping_run_server()
931 rdma_destroy_id(cb->child_cm_id); in rping_run_server()
947 for (ping = 0; !cb->count || ping < cb->count; ping++) { in rping_test_client()
948 cb->state = RDMA_READ_ADV; in rping_test_client()
951 cc = snprintf(cb->start_buf, cb->size, RPING_MSG_FMT, ping); in rping_test_client()
952 for (i = cc, c = start; i < cb->size; i++) { in rping_test_client()
953 cb->start_buf[i] = c; in rping_test_client()
961 cb->start_buf[cb->size - 1] = 0; in rping_test_client()
963 rping_format_send(cb, cb->start_buf, cb->start_mr); in rping_test_client()
964 ret = ibv_post_send(cb->qp, &cb->sq_wr, &bad_wr); in rping_test_client()
970 /* Wait for server to ACK */ in rping_test_client()
971 sem_wait(&cb->sem); in rping_test_client()
972 if (cb->state != RDMA_WRITE_ADV) { in rping_test_client()
973 fprintf(stderr, "wait for RDMA_WRITE_ADV state %d\n", in rping_test_client()
974 cb->state); in rping_test_client()
975 ret = -1; in rping_test_client()
979 rping_format_send(cb, cb->rdma_buf, cb->rdma_mr); in rping_test_client()
980 ret = ibv_post_send(cb->qp, &cb->sq_wr, &bad_wr); in rping_test_client()
986 /* Wait for the server to say the RDMA Write is complete. */ in rping_test_client()
987 sem_wait(&cb->sem); in rping_test_client()
988 if (cb->state != RDMA_WRITE_COMPLETE) { in rping_test_client()
989 fprintf(stderr, "wait for RDMA_WRITE_COMPLETE state %d\n", in rping_test_client()
990 cb->state); in rping_test_client()
991 ret = -1; in rping_test_client()
995 if (cb->validate) in rping_test_client()
996 if (memcmp(cb->start_buf, cb->rdma_buf, cb->size)) { in rping_test_client()
998 ret = -1; in rping_test_client()
1002 if (cb->verbose) in rping_test_client()
1003 printf("ping data: %s\n", cb->rdma_buf); in rping_test_client()
1006 return (cb->state == DISCONNECTED) ? 0 : ret; in rping_test_client()
1019 ret = rdma_connect(cb->cm_id, &conn_param); in rping_connect_client()
1025 sem_wait(&cb->sem); in rping_connect_client()
1026 if (cb->state != CONNECTED) { in rping_connect_client()
1027 fprintf(stderr, "wait for CONNECTED state %d\n", cb->state); in rping_connect_client()
1028 return -1; in rping_connect_client()
1039 if (cb->sin.ss_family == AF_INET) in rping_bind_client()
1040 ((struct sockaddr_in *) &cb->sin)->sin_port = cb->port; in rping_bind_client()
1042 ((struct sockaddr_in6 *) &cb->sin)->sin6_port = cb->port; in rping_bind_client()
1044 if (cb->ssource.ss_family) in rping_bind_client()
1045 ret = rdma_resolve_addr(cb->cm_id, (struct sockaddr *) &cb->ssource, in rping_bind_client()
1046 (struct sockaddr *) &cb->sin, 2000); in rping_bind_client()
1048 ret = rdma_resolve_addr(cb->cm_id, NULL, (struct sockaddr *) &cb->sin, 2000); in rping_bind_client()
1055 sem_wait(&cb->sem); in rping_bind_client()
1056 if (cb->state != ROUTE_RESOLVED) { in rping_bind_client()
1057 fprintf(stderr, "waiting for addr/route resolution state %d\n", in rping_bind_client()
1058 cb->state); in rping_bind_client()
1059 return -1; in rping_bind_client()
1062 DEBUG_LOG("rdma_resolve_addr - rdma_resolve_route successful\n"); in rping_bind_client()
1075 ret = rping_setup_qp(cb, cb->cm_id); in rping_run_client()
1087 ret = ibv_post_recv(cb->qp, &cb->rq_wr, &bad_wr); in rping_run_client()
1093 ret = pthread_create(&cb->cqthread, NULL, cq_thread, cb); in rping_run_client()
1113 rdma_disconnect(cb->cm_id); in rping_run_client()
1115 pthread_join(cb->cqthread, NULL); in rping_run_client()
1131 printf("getaddrinfo failed (%s) - invalid hostname or IP address\n", gai_strerror(ret)); in get_addr()
1135 if (res->ai_family == PF_INET) in get_addr()
1136 memcpy(addr, res->ai_addr, sizeof(struct sockaddr_in)); in get_addr()
1137 else if (res->ai_family == PF_INET6) in get_addr()
1138 memcpy(addr, res->ai_addr, sizeof(struct sockaddr_in6)); in get_addr()
1140 ret = -1; in get_addr()
1148 printf("%s -s [-vVd] [-S size] [-C count] [-a addr] [-p port]\n", in usage()
1150 printf("%s -c [-vVd] [-S size] [-C count] [-I addr] -a addr [-p port]\n", in usage()
1152 printf("\t-c\t\tclient side\n"); in usage()
1153 printf("\t-I\t\tSource address to bind to for client.\n"); in usage()
1154 printf("\t-s\t\tserver side. To bind to any address with IPv6 use -a ::0\n"); in usage()
1155 printf("\t-v\t\tdisplay ping data to stdout\n"); in usage()
1156 printf("\t-V\t\tvalidate ping data\n"); in usage()
1157 printf("\t-d\t\tdebug printfs\n"); in usage()
1158 printf("\t-S size \tping data size\n"); in usage()
1159 printf("\t-C count\tping count times\n"); in usage()
1160 printf("\t-a addr\t\taddress\n"); in usage()
1161 printf("\t-p port\t\tport\n"); in usage()
1162 printf("\t-P\t\tpersistent server mode allowing multiple connections\n"); in usage()
1174 return -ENOMEM; in main()
1177 cb->server = -1; in main()
1178 cb->state = IDLE; in main()
1179 cb->size = 64; in main()
1180 cb->port = htobe16(7174); in main()
1181 sem_init(&cb->sem, 0, 0); in main()
1184 ret = get_addr("0.0.0.0", (struct sockaddr *) &cb->sin); in main()
1189 while ((op=getopt(argc, argv, "a:I:Pp:C:S:t:scvVd")) != -1) { in main()
1192 ret = get_addr(optarg, (struct sockaddr *) &cb->sin); in main()
1195 ret = get_addr(optarg, (struct sockaddr *) &cb->ssource); in main()
1201 cb->port = htobe16(atoi(optarg)); in main()
1205 cb->server = 1; in main()
1209 cb->server = 0; in main()
1213 cb->size = atoi(optarg); in main()
1214 if ((cb->size < RPING_MIN_BUFSIZE) || in main()
1215 (cb->size > (RPING_BUFSIZE - 1))) { in main()
1218 cb->size, RPING_MIN_BUFSIZE, RPING_BUFSIZE); in main()
1224 cb->count = atoi(optarg); in main()
1225 if (cb->count < 0) { in main()
1227 cb->count); in main()
1230 DEBUG_LOG("count %d\n", (int) cb->count); in main()
1233 cb->verbose++; in main()
1237 cb->validate++; in main()
1252 if (cb->server == -1) { in main()
1258 cb->cm_channel = rdma_create_event_channel(); in main()
1259 if (!cb->cm_channel) { in main()
1265 ret = rdma_create_id(cb->cm_channel, &cb->cm_id, cb, RDMA_PS_TCP); in main()
1270 DEBUG_LOG("created cm_id %p\n", cb->cm_id); in main()
1272 ret = pthread_create(&cb->cmthread, NULL, cm_thread, cb); in main()
1278 if (cb->server) { in main()
1287 DEBUG_LOG("destroy cm_id %p\n", cb->cm_id); in main()
1288 rdma_destroy_id(cb->cm_id); in main()
1290 rdma_destroy_event_channel(cb->cm_channel); in main()