Хорошо, не совсем уверен, что это повреждение памяти или просто ошибка в моем коде, но вот описание проблемы:
Однопоточная программа регистрирует обработчик SIGALRM:
struct sigaction action;
sigset_t blocked;
sigfillset(&blocked);
sigdelset(&blocked, SIGKILL);
sigdelset(&blocked, SIGSTOP);
action.sa_handler = &handler_function;
action.sa_flags = SA_RESTART;
action.sa_mask = blocked;
// We are not interested in the previous action:
if (sigaction(SIGALRM, &action, NULL) == -1)
....
handler_function - это простая функция, которая вызывает функцию объекта:
void handler_function()
{
some_object->tick();
}
tick()
{
++variable;
}
Переменная имеет тип long.
моя программа имеет только один экземпляр some_object и только обработчик сигнала вызывает функцию tick, и только функция tick изменяет переменную. Другие функции только читают значение переменной.
Забыл упомянуть, что я создаю таймер:
struct timeval interval;
interval.tv_sec = 0;
interval.tv_usec = (100000);
struct itimerval timer;
timer.it_interval = interval;
timer.it_value = interval;
if (setitimer(ITIMER_REAL, &timer, NULL) == -1)
...
, поэтому функция галочки срабатывает 10 раз в секунду. Теперь проблема в том, что периодически я получаю другие члены-данные объекта some_object поврежденными, они являются типами POD (long), то есть внезапно содержат случайные значения. Я пытался выделить проблему в небольшой программе, но безрезультатно.
Любой совет будет оценен.
спасибо