* [LTP] [PATCH] openposix: Remove pthread_detach_1-2
@ 2026-06-15 14:25 Martin Doucha
2026-06-15 14:27 ` Andrea Cervesato via ltp
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Martin Doucha @ 2026-06-15 14:25 UTC (permalink / raw)
To: ltp
The POSIX specification of pthread_join() has changed in recent years and
pthread_detach_1-2 test scenario is no longer valid. The POSIX standard
issue 8 says that the behavior of pthread_join() called on a thread ID
which does not refer to a joinable thread is undefined.
https://pubs.opengroup.org/onlinepubs/9799919799/functions/pthread_join.html
The test creates a thread, detaches it using pthread_detach() and then
calls pthread_join(), expecting an error. As stated above, the expected
behavior is now undefined. Remove the test.
Signed-off-by: Martin Doucha <mdoucha@suse.cz>
---
.../interfaces/pthread_detach/1-2.c | 218 ------------------
1 file changed, 218 deletions(-)
delete mode 100644 testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/1-2.c
diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/1-2.c b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/1-2.c
deleted file mode 100644
index dc5ed39d3..000000000
--- a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/1-2.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2004, Bull S.A.. All rights reserved.
- * Created by: Sebastien Decugis
-
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
- * This sample test aims to check the following assertion:
- *
- * pthread_detach() will indicate that the thread resources
- * can be reclaimed as soon as the thread terminates.
- * This means that pthread_join() will fail on such a thread.
-
- * The steps are:
- *
- * -> create a thread with a joinable state
- * -> detach the thread, either from inside the thread or from outside
- * -> try and join the thread, and check an error is returned.
-
- * The test fails if pthread_join succeeds.
-
- */
-
-/********************************************************************************************/
-/****************************** standard includes *****************************************/
-/********************************************************************************************/
-#include <pthread.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sched.h>
-#include <semaphore.h>
-#include <errno.h>
-#include <assert.h>
-/********************************************************************************************/
-/****************************** Test framework *****************************************/
-/********************************************************************************************/
-#include "../testfrmw/testfrmw.h"
-#include "../testfrmw/testfrmw.c"
- /* This header is responsible for defining the following macros:
- * UNRESOLVED(ret, descr);
- * where descr is a description of the error and ret is an int (error code for example)
- * FAILED(descr);
- * where descr is a short text saying why the test has failed.
- * PASSED();
- * No parameter.
- *
- * Both three macros shall terminate the calling process.
- * The testcase shall not terminate in any other maneer.
- *
- * The other file defines the functions
- * void output_init()
- * void output(char * string, ...)
- *
- * Those may be used to output information.
- */
-
-/********************************************************************************************/
-/********************************** Configuration ******************************************/
-/********************************************************************************************/
-#ifndef VERBOSE
-#define VERBOSE 1
-#endif
-
-/********************************************************************************************/
-/*********************************** Test cases *****************************************/
-/********************************************************************************************/
-
-#include "../testfrmw/threads_scenarii.c"
-
-/* This file will define the following objects:
- * scenarii: array of struct __scenario type.
- * NSCENAR : macro giving the total # of scenarii
- * scenar_init(): function to call before use the scenarii array.
- * scenar_fini(): function to call after end of use of the scenarii array.
- */
-
-/********************************************************************************************/
-/*********************************** Real Test *****************************************/
-/********************************************************************************************/
-
-static unsigned int sc;
-
-static void *threaded(void *arg)
-{
- int ret = 0;
-
- if (arg != NULL) {
- ret = pthread_detach(pthread_self());
- if (ret != 0) {
- UNRESOLVED(ret, "Failed to detach the thread");
- }
- }
-
- /* Post the semaphore to unlock the main thread in case of a detached thread */
- do {
- ret = sem_post(&(scenarii[sc].sem));
- }
- while ((ret == -1) && (errno == EINTR));
- if (ret == -1) {
- UNRESOLVED(errno, "Failed to post the semaphore");
- }
-
- return arg;
-}
-
-int test_main(int argc PTS_ATTRIBUTE_UNUSED, char **argv PTS_ATTRIBUTE_UNUSED)
-{
- int ret = 0;
- pthread_t child;
-
- output_init();
-
- scenar_init();
-
- for (sc = 0; sc < NSCENAR; sc++) {
-#if VERBOSE > 0
- output("-----\n");
- output("Starting test with scenario (%i): %s\n", sc,
- scenarii[sc].descr);
-#endif
-
- if (scenarii[sc].detached != 0) { /* only joinable threads can be detached */
- ret =
- pthread_attr_setdetachstate(&scenarii[sc].ta,
- PTHREAD_CREATE_JOINABLE);
- if (ret != 0) {
- UNRESOLVED(ret,
- "Unable to set detachstate back to joinable");
- }
- }
-
- /* for detached scenarii, we will call pthread_detach from inside the thread.
- for joinable scenarii, we'll call pthread_detach from this thread. */
-
- ret =
- pthread_create(&child, &scenarii[sc].ta, threaded,
- (scenarii[sc].detached != 0) ? &ret : NULL);
- switch (scenarii[sc].result) {
- case 0: /* Operation was expected to succeed */
- if (ret != 0) {
- UNRESOLVED(ret, "Failed to create this thread");
- }
- break;
-
- case 1: /* Operation was expected to fail */
- if (ret == 0) {
- UNRESOLVED(-1,
- "An error was expected but the thread creation succeeded");
- }
-#if VERBOSE > 0
- break;
-
- case 2: /* We did not know the expected result */
- default:
- if (ret == 0) {
- output
- ("Thread has been created successfully for this scenario\n");
- } else {
- output
- ("Thread creation failed with the error: %s\n",
- strerror(ret));
- }
-#endif
- }
- if (ret == 0) { /* The new thread is running */
- /* Just wait for the thread to terminate */
- do {
- ret = sem_wait(&(scenarii[sc].sem));
- }
- while ((ret == -1) && (errno == EINTR));
- if (ret == -1) {
- UNRESOLVED(errno,
- "Failed to post the semaphore");
- }
-
- /* If we must detach from here, we do it now. */
- if (scenarii[sc].detached == 0) {
- ret = pthread_detach(child);
- if (ret != 0) {
- UNRESOLVED(ret,
- "Failed to detach the child thread.");
- }
- }
-
- /* now check that the thread resources are freed. */
- ret = pthread_join(child, NULL);
- if (ret == 0) {
- FAILED
- ("We were able to join a detached thread.");
- }
-
- /* Let the thread an additionnal row to cleanup */
- sched_yield();
- }
- }
-
- scenar_fini();
-#if VERBOSE > 0
- output("-----\n");
- output("All test data destroyed\n");
- output("Test PASSED\n");
-#endif
-
- PASSED;
-}
--
2.54.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [LTP] [PATCH] openposix: Remove pthread_detach_1-2
2026-06-15 14:25 [LTP] [PATCH] openposix: Remove pthread_detach_1-2 Martin Doucha
@ 2026-06-15 14:27 ` Andrea Cervesato via ltp
2026-06-15 14:38 ` [LTP] " linuxtestproject.agent
2026-06-15 16:09 ` [LTP] [PATCH] " Jan Stancek via ltp
2 siblings, 0 replies; 4+ messages in thread
From: Andrea Cervesato via ltp @ 2026-06-15 14:27 UTC (permalink / raw)
To: Martin Doucha; +Cc: ltp
Acked-by: Andrea Cervesato <andrea.cervesato@suse.com>
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [LTP] openposix: Remove pthread_detach_1-2
2026-06-15 14:25 [LTP] [PATCH] openposix: Remove pthread_detach_1-2 Martin Doucha
2026-06-15 14:27 ` Andrea Cervesato via ltp
@ 2026-06-15 14:38 ` linuxtestproject.agent
2026-06-15 16:09 ` [LTP] [PATCH] " Jan Stancek via ltp
2 siblings, 0 replies; 4+ messages in thread
From: linuxtestproject.agent @ 2026-06-15 14:38 UTC (permalink / raw)
To: Martin Doucha; +Cc: ltp
Hi Martin,
On Mon, 15 Jun 2026, Martin Doucha wrote:
> openposix: Remove pthread_detach_1-2
Verdict - Reviewed
---
Note:
The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.
Regards,
LTP AI Reviewer
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [LTP] [PATCH] openposix: Remove pthread_detach_1-2
2026-06-15 14:25 [LTP] [PATCH] openposix: Remove pthread_detach_1-2 Martin Doucha
2026-06-15 14:27 ` Andrea Cervesato via ltp
2026-06-15 14:38 ` [LTP] " linuxtestproject.agent
@ 2026-06-15 16:09 ` Jan Stancek via ltp
2 siblings, 0 replies; 4+ messages in thread
From: Jan Stancek via ltp @ 2026-06-15 16:09 UTC (permalink / raw)
To: Martin Doucha; +Cc: ltp
On Mon, Jun 15, 2026 at 4:25 PM Martin Doucha <mdoucha@suse.cz> wrote:
>
> The POSIX specification of pthread_join() has changed in recent years and
> pthread_detach_1-2 test scenario is no longer valid. The POSIX standard
> issue 8 says that the behavior of pthread_join() called on a thread ID
> which does not refer to a joinable thread is undefined.
>
> https://pubs.opengroup.org/onlinepubs/9799919799/functions/pthread_join.html
>
> The test creates a thread, detaches it using pthread_detach() and then
> calls pthread_join(), expecting an error. As stated above, the expected
> behavior is now undefined. Remove the test.
>
> Signed-off-by: Martin Doucha <mdoucha@suse.cz>
Acked-by: Jan Stancek <jstancek@redhat.com>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-06-15 16:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-15 14:25 [LTP] [PATCH] openposix: Remove pthread_detach_1-2 Martin Doucha
2026-06-15 14:27 ` Andrea Cervesato via ltp
2026-06-15 14:38 ` [LTP] " linuxtestproject.agent
2026-06-15 16:09 ` [LTP] [PATCH] " Jan Stancek via ltp
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.