RE: [PATCH] rping: create persistent server threads in DETACHED state

2015-01-22 Thread Hefty, Sean
Thanks - applied



RE: [PATCH] rping: create persistent server threads in DETACHED state

2015-01-20 Thread Hefty, Sean
 Does this patch look ok?

It looks okay at a glance.  Sorry, I haven't lost this, but just haven't had 
time to apply it.
N�r��yb�X��ǧv�^�)޺{.n�+{��ٚ�{ay�ʇڙ�,j��f���h���z��w���
���j:+v���w�j�mzZ+�ݢj��!�i

Re: [PATCH] rping: create persistent server threads in DETACHED state

2015-01-20 Thread Steve Wise

Hey Sean,

Does this patch look ok?
--
To unsubscribe from this list: send the line unsubscribe linux-rdma in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] rping: create persistent server threads in DETACHED state

2015-01-12 Thread Steve Wise
Since the persistent server threads aren't joined, they must be created in
the DETACHED state or resources will not be cleaned up when they exit.
This results in pthread_create() failures after thousands of rping
instances are run against a persistent server.

Also check the return from all calls to pthread_create() so we don't
ignore a thread creation failure.

Signed-off-by: Steve Wise sw...@opengridcomputing.com
---

 examples/rping.c |   47 ++-
 1 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/examples/rping.c b/examples/rping.c
index 58b642e..9486314 100644
--- a/examples/rping.c
+++ b/examples/rping.c
@@ -793,7 +793,11 @@ static void *rping_persistent_server_thread(void *arg)
goto err2;
}
 
-   pthread_create(cb-cqthread, NULL, cq_thread, cb);
+   ret = pthread_create(cb-cqthread, NULL, cq_thread, cb);
+   if (ret) {
+   perror(pthread_create);
+   goto err2;
+   }
 
ret = rping_accept(cb);
if (ret) {
@@ -825,11 +829,27 @@ static int rping_run_persistent_server(struct rping_cb 
*listening_cb)
 {
int ret;
struct rping_cb *cb;
+   pthread_attr_t attr;
 
ret = rping_bind_server(listening_cb);
if (ret)
return ret;
 
+   /*
+* Set persistent server threads to DEATCHED state so
+* they release all their resources when they exit.
+*/
+   ret = pthread_attr_init(attr);
+   if (ret) {
+   perror(pthread_attr_init);
+   return ret;
+   }
+   ret = pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);
+   if (ret) {
+   perror(pthread_attr_setdetachstate);
+   return ret;
+   }
+
while (1) {
sem_wait(listening_cb-sem);
if (listening_cb-state != CONNECT_REQUEST) {
@@ -841,7 +861,12 @@ static int rping_run_persistent_server(struct rping_cb 
*listening_cb)
cb = clone_cb(listening_cb);
if (!cb)
return -1;
-   pthread_create(cb-persistent_server_thread, NULL, 
rping_persistent_server_thread, cb);
+
+   ret = pthread_create(cb-persistent_server_thread, attr, 
rping_persistent_server_thread, cb);
+   if (ret) {
+   perror(pthread_create);
+   return ret;
+   }
}
return 0;
 }
@@ -880,7 +905,11 @@ static int rping_run_server(struct rping_cb *cb)
goto err2;
}
 
-   pthread_create(cb-cqthread, NULL, cq_thread, cb);
+   ret = pthread_create(cb-cqthread, NULL, cq_thread, cb);
+   if (ret) {
+   perror(pthread_create);
+   goto err2;
+   }
 
ret = rping_accept(cb);
if (ret) {
@@ -1055,7 +1084,11 @@ static int rping_run_client(struct rping_cb *cb)
goto err2;
}
 
-   pthread_create(cb-cqthread, NULL, cq_thread, cb);
+   ret = pthread_create(cb-cqthread, NULL, cq_thread, cb);
+   if (ret) {
+   perror(pthread_create);
+   goto err2;
+   }
 
ret = rping_connect_client(cb);
if (ret) {
@@ -1222,7 +1255,11 @@ int main(int argc, char *argv[])
}
DEBUG_LOG(created cm_id %p\n, cb-cm_id);
 
-   pthread_create(cb-cmthread, NULL, cm_thread, cb);
+   ret = pthread_create(cb-cmthread, NULL, cm_thread, cb);
+   if (ret) {
+   perror(pthread_create);
+   goto out2;
+   }
 
if (cb-server) {
if (persistent_server)

--
To unsubscribe from this list: send the line unsubscribe linux-rdma in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html