Есть код демона, который вынужден сопровождать. Внезапно, как и всегда бывает, демон стал падать по segfault. Выяснилось место появления segmentatin fault, структура кода такая:
int g_finished;
static void *thr1(void *data)
{
while (!g_finished) {
...
}
return NULL;
}
static void *thr2(void *data)
{
while (!g_finished) {
...
}
return NULL;
}
static void *thr3(void *data)
{
while (!g_finished) {
...
}
return NULL;
}
static void *thr4(void *data)
{
InitPollingJob();
while (!g_finished) {
...
}
return NULL;
}
int main(void)
{
pthread_create(&tid1, NULL, &thr1, NULL);
pthread_create(&tid2, NULL, &thr2, NULL);
pthread_create(&tid3, NULL, &thr3, NULL);
...
pthread_create(&tid4, NULL, &thr4, NULL);
...
while (! g_finished) { /* точка segmentation fault */
....
}
return 0;
}
Переменная g_finished нигде не защищена мьютексами. Возможно ли что приложение падает именно по этой причине? Но тогда как оно работало продолжительное время без проблем?