add missing files (#8124)
authorSimon Marlow <marlowsd@gmail.com>
Sat, 1 Mar 2014 07:14:47 +0000 (07:14 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Sat, 1 Mar 2014 07:15:23 +0000 (07:15 +0000)
testsuite/tests/rts/T8124.hs [new file with mode: 0644]
testsuite/tests/rts/T8124_c.c [new file with mode: 0644]

diff --git a/testsuite/tests/rts/T8124.hs b/testsuite/tests/rts/T8124.hs
new file mode 100644 (file)
index 0000000..c914b03
--- /dev/null
@@ -0,0 +1,6 @@
+module T8124 where
+
+f :: Int -> Int
+f x = x + 1
+
+foreign export ccall "f" f :: Int -> Int
diff --git a/testsuite/tests/rts/T8124_c.c b/testsuite/tests/rts/T8124_c.c
new file mode 100644 (file)
index 0000000..e7e8739
--- /dev/null
@@ -0,0 +1,42 @@
+#include <stdlib.h>
+#include "T8124_stub.h"
+#include "HsFFI.h"
+#include <pthread.h>
+
+void *thread(void *param)
+{
+    f(3);
+    hs_thread_done();
+    pthread_exit(NULL);
+}
+
+int main (int argc, char *argv[])
+{
+    hs_init(&argc,&argv);
+
+    // check that we can call hs_thread_done() without having made any
+    // Haskell calls:
+    hs_thread_done();
+
+    // check that we can call hs_thread_done() and then make another Haskell
+    // call:
+    int i;
+    for (i=0; i < 1000; i++) {
+        f(3);
+        hs_thread_done();
+    }
+
+    // check that we can call hs_thread_done() twice:
+    hs_thread_done();
+    hs_thread_done();
+
+    // check that hs_thread_done() from child threads works:
+    pthread_t pid;
+    for (i=0; i < 1000; i++) {
+        pthread_create(&pid, NULL, thread, NULL);
+        pthread_join(pid, NULL);
+    }
+
+    hs_exit();
+    exit(0);
+}