Skip to content

Instantly share code, notes, and snippets.

@adililhan
Created October 17, 2022 20:18
Show Gist options
  • Save adililhan/06b6e901867f6fa0348bb7a6808aab81 to your computer and use it in GitHub Desktop.
Save adililhan/06b6e901867f6fa0348bb7a6808aab81 to your computer and use it in GitHub Desktop.
non-reentrant function with global variable
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
int sum;
int calculate(int first, int second) {
sum = first + second;
sleep(3); // represent I/O intensive function call
return sum;
}
void signal_handler(int signal_number) {
sum = 50 + 60;
printf("Interrupt caught!\n");
printf("Result from signal_handler: %d\n", sum);
printf("---\n");
}
int main()
{
struct sigaction sa;
sa.sa_handler = signal_handler;
sa.sa_flags = SA_RESTART;
if(sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
exit(EXIT_FAILURE);
}
for (;;) {
printf("Result from main: %d\n", calculate(3, 5));
printf("---\n");
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment