From 336db7e3474508b46a0e6bdb013a8bee5aac9adf Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Fri, 27 May 2011 11:51:23 +0300
Subject: [PATCH] Check the return code of pthread_create(). Otherwise we go
 into an infinite loop if it fails, which is what what happened on my HP-UX
 box. (I think the reason it failed on that box is a misconfiguration on my
 behalf, but that's no reason to hang.)

---
 src/test/thread/thread_test.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/test/thread/thread_test.c b/src/test/thread/thread_test.c
index 0782e8c66bb..6a818299129 100644
--- a/src/test/thread/thread_test.c
+++ b/src/test/thread/thread_test.c
@@ -150,6 +150,7 @@ main(int argc, char *argv[])
 	pthread_t	thread1,
 				thread2;
 	int			fd;
+	int			rc;
 
 #ifdef WIN32
 	WSADATA		wsaData;
@@ -199,8 +200,23 @@ main(int argc, char *argv[])
 	/* Hold lock until we are ready for the child threads to exit. */
 	pthread_mutex_lock(&init_mutex);
 
-	pthread_create(&thread1, NULL, (void *(*) (void *)) func_call_1, NULL);
-	pthread_create(&thread2, NULL, (void *(*) (void *)) func_call_2, NULL);
+	rc = pthread_create(&thread1, NULL, (void *(*) (void *)) func_call_1, NULL);
+	if (rc != 0)
+	{
+		fprintf(stderr, "Failed to create thread 1: %s **\nexiting\n",
+				strerror(rc));
+		exit(1);
+	}
+	rc = pthread_create(&thread2, NULL, (void *(*) (void *)) func_call_2, NULL);
+	if (rc != 0)
+	{
+		/*
+		 * strerror() might not be thread-safe, and we already spawned thread
+		 * 1 that uses it
+		 */
+		fprintf(stderr, "Failed to create thread 2 **\nexiting\n");
+		exit(1);
+	}
 
 	while (thread1_done == 0 || thread2_done == 0)
 		sched_yield();			/* if this is a portability problem, remove it */
-- 
GitLab