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) {
{
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) {
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;
}
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) {
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) {
}
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)