| #include <errno.h> |
| #include <pthread.h> |
| #include <stdio.h> |
| #include <unistd.h> |
| |
| static unsigned int g_timeout = 1000000; |
| |
| extern int usleep(unsigned int); |
| |
| int function_to_call() { |
| |
| errno = 0; |
| while (1) { |
| int result = usleep(g_timeout); |
| if (errno != EINTR) |
| break; |
| } |
| |
| pthread_exit((void *)10); |
| |
| return 20; // Prevent warning |
| } |
| |
| void *exiting_thread_func(void *unused) { |
| function_to_call(); // Break here and cause the thread to exit |
| return NULL; |
| } |
| |
| int main() { |
| void *exit_ptr; |
| pthread_t exiting_thread; |
| |
| pthread_create(&exiting_thread, NULL, exiting_thread_func, NULL); |
| |
| pthread_join(exiting_thread, &exit_ptr); |
| int ret_val = (int)exit_ptr; |
| usleep(g_timeout * 4); // Make sure in the "run all threads" case |
| // that we don't run past our breakpoint. |
| return ret_val; // Break here to make sure the thread exited. |
| } |