diff mbox series

[3/7] openposix: sem_destroy/3-1: Fix

Message ID 20220620092146.7604-4-chrubis@suse.cz
State Accepted
Headers show
Series openposix: Fix 'no return in nonvoid function' warnings | expand

Commit Message

Cyril Hrubis June 20, 2022, 9:21 a.m. UTC
There were several problems in the test and it actually didn't even call
the sem_destroy() function at all.

- The main thread did call thread_exit() before actually attempting to
  destroy the semaphores

- The program exit value was undefined (random garbage) in the unlikely
  case that pthread_join() failed for one of the threads

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 .../conformance/interfaces/sem_destroy/3-1.c  | 31 +++++++++++++------
 1 file changed, 22 insertions(+), 9 deletions(-)

Comments

Richard Palethorpe July 5, 2022, 5:23 a.m. UTC | #1
Hello,

Cyril Hrubis <chrubis@suse.cz> writes:

> +	if (sem_destroy(&psem) == 0 && sem_destroy(&csem) == 0) {
>  		puts("TEST PASS");
> -		pthread_exit(NULL);

lol

> -		if ((sem_destroy(&psem) == 0) && sem_destroy(&csem) == 0) {
> -			return PTS_PASS;
> -		} else {
> -			puts("TEST FAILED");
> -			return PTS_FAIL;
> -		}
> +		return PTS_PASS;
> +	} else {
> +		puts("TEST FAILED");
> +		return PTS_FAIL;
>  	}
>  }
>  
> -- 
> 2.35.1

Reviewed-by: Richard Palethorpe <rpalethorpe@suse.com>
diff mbox series

Patch

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/sem_destroy/3-1.c b/testcases/open_posix_testsuite/conformance/interfaces/sem_destroy/3-1.c
index 2a02a7532..bca21371f 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/sem_destroy/3-1.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/sem_destroy/3-1.c
@@ -19,11 +19,11 @@ 
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <pthread.h>
+#include <string.h>
 #include "posixtest.h"
 
 #define TEST "3-1"
 #define FUNCTION "sem_destroy"
-#define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "
 
 static sem_t psem, csem;
 static int n;
@@ -33,6 +33,7 @@  static void *consumer(void *);
 int main(void)
 {
 	pthread_t prod, cons;
+	int err;
 	long cnt = 3;
 
 	n = 0;
@@ -40,28 +41,40 @@  int main(void)
 		perror("sem_init");
 		return PTS_UNRESOLVED;
 	}
+
 	if (sem_init(&psem, 0, 1) < 0) {
 		perror("sem_init");
 		return PTS_UNRESOLVED;
 	}
+
 	if (pthread_create(&prod, NULL, producer, (void *)cnt) != 0) {
 		perror("pthread_create");
 		return PTS_UNRESOLVED;
 	}
+
 	if (pthread_create(&cons, NULL, consumer, (void *)cnt) != 0) {
 		perror("pthread_create");
 		return PTS_UNRESOLVED;
 	}
 
-	if (pthread_join(prod, NULL) == 0 && pthread_join(cons, NULL) == 0) {
+	err = pthread_join(prod, NULL);
+	if (err) {
+		printf("Failed to join thread: %s", strerror(err));
+		return PTS_UNRESOLVED;
+	}
+
+	err = pthread_join(cons, NULL);
+	if (err) {
+		printf("Failed to join thread: %s", strerror(err));
+		return PTS_UNRESOLVED;
+	}
+
+	if (sem_destroy(&psem) == 0 && sem_destroy(&csem) == 0) {
 		puts("TEST PASS");
-		pthread_exit(NULL);
-		if ((sem_destroy(&psem) == 0) && sem_destroy(&csem) == 0) {
-			return PTS_PASS;
-		} else {
-			puts("TEST FAILED");
-			return PTS_FAIL;
-		}
+		return PTS_PASS;
+	} else {
+		puts("TEST FAILED");
+		return PTS_FAIL;
 	}
 }