aboutsummaryrefslogtreecommitdiff
path: root/test/test-stop-threads.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-stop-threads.c')
-rw-r--r--test/test-stop-threads.c46
1 files changed, 0 insertions, 46 deletions
diff --git a/test/test-stop-threads.c b/test/test-stop-threads.c
deleted file mode 100644
index d53d8cd..0000000
--- a/test/test-stop-threads.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "substitute-internal.h"
-#include "stop-other-threads.h"
-#include <stdio.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <assert.h>
-/* printf without taking any locks - because they might be taken at stop time */
-#define ulprintf(...) do { \
- char buf[256]; \
- int len = sprintf(buf, __VA_ARGS__); \
- write(1, buf, len); \
-} while(0)
-
-static void *some_thread(void *ip) {
- long i = (long) ip;
- while (1) {
- ulprintf("Hello from %ld\n", i);
- sleep(1);
- }
-}
-static void replacement() {
- ulprintf("Bye\n");
- pthread_exit(NULL);
-}
-static uintptr_t patch_callback(void *ctx, UNUSED uintptr_t pc) {
- assert(!ctx);
- return (uintptr_t) replacement;
-}
-
-int main() {
- pthread_t pts[10];
- for (long i = 0; i < 10; i++)
- pthread_create(&pts[i], NULL, some_thread, (void *) i);
- sleep(1);
- void *stop_token;
- ulprintf("stopping\n");
- assert(!stop_other_threads(&stop_token));
- ulprintf("stopped\n");
- assert(!apply_pc_patch_callback(stop_token, patch_callback, NULL));
- ulprintf("resuming\n");
- assert(!resume_other_threads(stop_token));
- ulprintf("resumed\n");
- void *out;
- for (long i = 0; i < 10; i++)
- assert(!pthread_join(pts[i], &out));
-}