svn commit: r273811 - head/contrib/ofed/librdmacm/examples
Navdeep Parhar
np at FreeBSD.org
Wed Oct 29 06:24:13 UTC 2014
Author: np
Date: Wed Oct 29 06:24:12 2014
New Revision: 273811
URL: https://svnweb.freebsd.org/changeset/base/273811
Log:
rping: make sure that the CQ event thread can never poll a CQ after it
has been destroyed.
Submitted by: Hariprasad at Chelsio dot com
Sponsored by: Chelsio Communications
Modified:
head/contrib/ofed/librdmacm/examples/rping.c
Modified: head/contrib/ofed/librdmacm/examples/rping.c
==============================================================================
--- head/contrib/ofed/librdmacm/examples/rping.c Wed Oct 29 04:32:46 2014 (r273810)
+++ head/contrib/ofed/librdmacm/examples/rping.c Wed Oct 29 06:24:12 2014 (r273811)
@@ -40,7 +40,6 @@
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
-#include <byteswap.h>
#include <semaphore.h>
#include <arpa/inet.h>
#include <pthread.h>
@@ -280,10 +279,10 @@ static int rping_cq_event_handler(struct
ret = 0;
if (wc.status) {
- fprintf(stderr, "cq completion failed status %d\n",
- wc.status);
if (wc.status != IBV_WC_WR_FLUSH_ERR)
- ret = -1;
+ fprintf(stderr, "cq completion failed status %d\n",
+ wc.status);
+ ret = -1;
goto error;
}
@@ -800,10 +799,9 @@ static void *rping_persistent_server_thr
rping_test_server(cb);
rdma_disconnect(cb->child_cm_id);
+ pthread_join(cb->cqthread, NULL);
rping_free_buffers(cb);
rping_free_qp(cb);
- pthread_cancel(cb->cqthread);
- pthread_join(cb->cqthread, NULL);
rdma_destroy_id(cb->child_cm_id);
free_cb(cb);
return NULL;
@@ -888,6 +886,7 @@ static int rping_run_server(struct rping
rping_test_server(cb);
rdma_disconnect(cb->child_cm_id);
+ pthread_join(cb->cqthread, NULL);
rdma_destroy_id(cb->child_cm_id);
err2:
rping_free_buffers(cb);
@@ -1053,9 +1052,16 @@ static int rping_run_client(struct rping
goto err2;
}
- rping_test_client(cb);
+ ret = rping_test_client(cb);
+ if (ret) {
+ fprintf(stderr, "rping client failed: %d\n", ret);
+ goto err3;
+ }
+ ret = 0;
+err3:
rdma_disconnect(cb->cm_id);
err2:
+ pthread_join(cb->cqthread, NULL);
rping_free_buffers(cb);
err1:
rping_free_qp(cb);
More information about the svn-src-all
mailing list