| #include <pthread.h> | |
| #include <unistd.h> | |
| #include <cstdio> | |
| #include <cstring> | |
| __attribute__((noinline)) void break_here(char *buf) { | |
| // Memory barrier to keep the function body non-empty. | |
| asm volatile("" ::: "memory"); | |
| } | |
| void *test_thread(void *) { | |
| char buf[1024]; | |
| for (int i = 0; i < 200; i++) { | |
| memset(buf, 0, sizeof(buf)); | |
| break_here(buf); | |
| if (memcmp(buf, "OK", 2) != 0) { | |
| printf("FAILED at iteration %d\n", i); | |
| _exit(1); | |
| } | |
| usleep(50); | |
| } | |
| return nullptr; | |
| } | |
| int main() { | |
| pthread_t thread; | |
| if (pthread_create(&thread, nullptr, test_thread, nullptr) != 0) { | |
| perror("pthread_create"); | |
| return 1; | |
| } | |
| pthread_join(thread, nullptr); | |
| printf("PASSED\n"); | |
| return 0; | |
| } |