-//Filename: pause.c
+//Filename: pthread_pause.c
//Author: Tomas 'Harvie' Mudrunka 2021
-//Build: CFLAGS=-lpthread make pause; ./pause
-//Test: valgrind --tool=helgrind ./pause
+//Build: CFLAGS=-lpthread make pthread_pause; ./pthread_pause
+//Test: valgrind --tool=helgrind ./pthread_pause
//I've wrote this code as excercise to solve following stack overflow question:
// https://stackoverflow.com/questions/9397068/how-to-pause-a-pthread-any-time-i-want/68119116#68119116
#define PTHREAD_XSIG_CONT (SIGRTMIN+1)
#define PTHREAD_XSIGRTMIN (SIGRTMIN+2) //First unused RT signal
+pthread_t main_thread;
+
void pthread_pause_handler(int signal) {
//Do nothing when there are more signals pending (to cleanup the queue)
sigset_t pending;
pthread_pause_disable();
printf("Running!\n");
pthread_pause_enable();
+ //pthread_pause(main_thread);
+ //pthread_unpause(main_thread);
}
}
int main() {
pthread_t t;
+ main_thread = pthread_self();
pthread_pause_enable(); //Will get inherited by all threads from now on
//you need to call pthread_pause_enable (or disable) before creating threads,
//otherwise first signal will kill whole process