mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
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
This commit is contained in:
parent
05f0ff5a30
commit
1db6552d17
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=273811
|
@ -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 rping_cb *cb)
|
|||
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_thread(void *arg)
|
|||
|
||||
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_cb *cb)
|
|||
|
||||
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_cb *cb)
|
|||
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);
|
||||
|
|
Loading…
Reference in a new issue