OSDN Git Service

2002-11-25 Robert Collins <rbtcollins@hotmail.com>
authorrbcollins <rbcollins>
Sun, 24 Nov 2002 13:41:35 +0000 (13:41 +0000)
committerrbcollins <rbcollins>
Sun, 24 Nov 2002 13:41:35 +0000 (13:41 +0000)
        * readme: Document running portions of the test suite (Thanks Egor!).
        * winsup.api/pthread/mainthreadexits.c: New file, derived from
        Thomas Pfaff's test cases.
        * winsup.api/pthread/threadidafterfork.c: Ditto.

winsup/testsuite/ChangeLog
winsup/testsuite/README
winsup/testsuite/winsup.api/pthread/mainthreadexits.c [new file with mode: 0644]
winsup/testsuite/winsup.api/pthread/threadidafterfork.c [new file with mode: 0644]

index 9c97702..502c12b 100644 (file)
@@ -1,3 +1,10 @@
+2002-11-25  Robert Collins  <rbtcollins@hotmail.com>
+
+       * readme: Document running portions of the test suite (Thanks Egor!).
+       * winsup.api/pthread/mainthreadexits.c: New file, derived from 
+       Thomas Pfaff's test cases.
+       * winsup.api/pthread/threadidafterfork.c: Ditto.
+
 2002-08-25  Christopher Faylor  <cgf@redhat.com>
 
        * Makefile.in (RUNTEST): Use Makefile's srcdir and bupdir* macros,
index 346111e..1f289f1 100644 (file)
@@ -33,3 +33,8 @@ to fail, and will "fail" if they compile, run, and return zero.
 
 "make check" will only work if you run it *on* an NT machine.
 Cross-checking is not supported.
+
+To test a subset of the test-suite, use
+$ make check CYGWIN_TESTSUITE_TESTS=regexp
+
+
diff --git a/winsup/testsuite/winsup.api/pthread/mainthreadexits.c b/winsup/testsuite/winsup.api/pthread/mainthreadexits.c
new file mode 100644 (file)
index 0000000..dbd6969
--- /dev/null
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <pthread.h>
+
+static void * Thread (void *);
+
+static pthread_t main_thread;
+static pthread_t secondThread;
+static int result = 2;
+
+int main(void)
+{
+  main_thread = pthread_self ();
+
+  if (pthread_create (&secondThread, NULL, Thread, NULL))
+      exit (1);
+  sleep (5);
+  pthread_exit (&result);
+  /* If pthread_exit doesm't (which would be a bug) then we do */
+  return 1;
+}
+
+static void * Thread (void *not_used)
+{
+  void *myresult;
+  /* We should be able to join this */
+  if (pthread_join (main_thread, &myresult))
+      exit (1);
+
+  if (*(int *)myresult != 2)
+      exit (1);
+
+  exit (0);
+}
+/*
+This valid code doesn't work at all. The mainthread object in MTinterface
+is not properly initialized, the cancel_event is NULL and the win32_obj_id
+is NULL because myself->hProcess is NULL when MTinterface is initialized
+(and i don't think that a process handle can be used as thread handle).
+Even if the handles would be valid the pthread_join call would try to
+delete a thread object that is created static which would result in a
+corrupted heap.
+
+Concept test Contributed by Thomas Pfaff <tpfaff@gmx.net>
+Scriptable test by Robert Collins <rbtcollins@hotmail.com>
+
+*/
diff --git a/winsup/testsuite/winsup.api/pthread/threadidafterfork.c b/winsup/testsuite/winsup.api/pthread/threadidafterfork.c
new file mode 100644 (file)
index 0000000..da93a4d
--- /dev/null
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <pthread.h>
+
+static void * TestThread ( void * );
+
+int main (void)
+{
+  pthread_t t;
+
+  pthread_create (&t, NULL, TestThread, NULL);
+  pthread_join (t, NULL);
+
+  return 0;
+}
+
+static void * TestThread ( void *not_used )
+{
+  pthread_t iAm = pthread_self();
+  int status;
+  switch (fork ())
+    {
+    case -1:
+      exit(1);
+    case 0:
+      if (iAm != pthread_self())
+         exit (1);
+      else
+         exit (0);
+      break;
+    default:
+      wait (&status);
+      if (status != 0)
+         exit (1);
+    }
+  exit(0);
+}
+
+/*
+The forked child will not get the same thread handle as its parent, it
+will get the thread handle from the main thread instead. The child will
+not terminate because the threadcount is still 2 after the fork (it is
+set to 1 in MTinterface::Init and then set back to 2 after the childs
+memory gets overwritten by the parent).
+
+concept test by Thomas Pfaff <tpfaff@gmx.net>
+scritable test by Robert Collins <rbtcollins@hotmail.com>
+*/