скажу сразу, что тут, похоже, нужны сильные экстрасенсы и мощные телепаты.
в какой-то момент перестал обрабатываться Ctrl+C, но если кильнуть с SIGINT'ом, то все ok
в самой обработке ничего хитрого
void sighandler(int n)
{
switch (n) {
case SIGINT:
printf("\n");
g_stop = 1;
printf("INTERRUPT SIGNAL CATCHED\n");
break;
case SIGALRM:
printf("ALARM SIGNAL CATCHED\n");
g_alarm = 1;
break;
};
}
внутри main(...):
#if 1
if (signal(SIGALRM, sighandler) == SIG_ERR)
printf("warning: cannot catch SIGALRM\n");
if (signal(SIGINT, sighandler) == SIG_ERR)
printf("warning: cannot catch SIGINT\n");
#else
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sighandler;
if (sigemptyset(&sa.sa_mask))
return 1;
/*
if (sigaddset(&sa.sa_mask, SIGINT))
return 1;
if (sigaddset(&sa.sa_mask, SIGALRM))
return 1;
*/
if (sigaction(SIGALRM, &sa, NULL))
printf("warning: cannot catch SIGALRM\n");
if (sigaction(SIGINT, &sa, NULL))
printf("warning: cannot catch SIGINT\n");
#endif
сначала работало, но одним прекрасным утром перестало :-\
при этом на x86_64 все ок...
есть какие-нибудь светлые идеи или видения? %)
p.s. а SIGALRM приходит и ловится
p.p.s. valgrind говорит, что все в порядке:
==26353== HEAP SUMMARY:
==26353== in use at exit: 0 bytes in 0 blocks
==26353== total heap usage: 54 allocs, 54 frees, 61,124 bytes allocated
==26353==
==26353== All heap blocks were freed -- no leaks are possible
==26353==
==26353== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 6)
--26353--
--26353-- used_suppression: 15 U1004-ARM-_dl_relocate_object
==26353==
==26353== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 6)