--- /dev/null
+/* fork a process that has created a detached thread. */
+
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <signal.h>
+
+static void *threadmain(void *dummy)
+{
+ sleep((unsigned long)dummy);
+ return NULL;
+}
+
+int main(int argc, char **argv)
+{
+ int ctr;
+ pid_t childpid;
+ pthread_t childthread;
+ void *res;
+ int status;
+
+ pthread_create(&childthread, NULL, threadmain, (void *)2);
+ pthread_detach(childthread);
+
+ childpid = fork();
+ switch (childpid) {
+ case 0:
+ pthread_create(&childthread, NULL, threadmain, 0);
+ pthread_join(childthread, &res);
+ exit(0);
+ break;
+ case -1:
+ perror("FAILED: fork failed\n");
+ break;
+ default:
+ break;
+ }
+
+ ctr = 0;
+ while (waitpid(childpid, &status, 0) != childpid) {
+ sleep(1);
+ ctr++;
+ if (ctr >= 10) {
+ fprintf(stderr, "FAILED - timeout waiting for child\n");
+ return 0;
+ }
+ }
+
+ fprintf(stderr, "PASS\n");
+
+ return 0;
+}