39 lines
		
	
	
		
			852 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			852 B
		
	
	
	
		
			C
		
	
	
	
| #include <errno.h>
 | |
| #include <pthread.h>
 | |
| #include <stdio.h>
 | |
| #include <unistd.h>
 | |
| 
 | |
| static unsigned int g_timeout = 100000;
 | |
| 
 | |
| 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() {
 | |
|   char *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.
 | |
| }
 |