Какие возможные причины вы знаете для ситуации, описанной в заголовке?Вот как выглядит мой bt:
#0 0x00a40089 in ?? ()
#1 0x09e3fac0 in ?? ()
#2 0x09e34f30 in ?? ()
#3 0xb7ef9074 in ?? ()
#4 0xb7ef9200 in ?? ()
#5 0xb7ef9028 in ?? ()
#6 0x081d45a0 in LogFile::Flush ()
#7 0x081d45a0 in LogFile::Flush ()
#8 0x081d46e0 in LogFile::Close ()
#9 0x081d4dbf in LogFile::OpenLogFile ()
#10 0x081d4eb9 in LogFile::PerformPeriodicalFlush ()
#11 0x081d4fca in LogFile::StoreRecord ()
#12 0x081d50c2 in LogFile::StoreRecord ()
и он дает мне Program terminated with signal 11, Segmentation fault.
Обертка вокруг fflush () проста, ничего не делает, просто вызывает fflash
и проверяет ошибки(если возвращенный код <0).Итак, я думаю, что ошибка сегмента вызвана <code>fflash.Или возможно быть где-то еще из-за ??
на вершине стека?
OS: RHEL5;gcc версия 3.4.6 20060404 (Red Hat 3.4.6-3);отлажена с помощью gdb, с исходным exe-файлом с максимальной отладочной информацией.
Я знаю о сбое сегмента при отсутствии места на диске, но это не тот случай (так как у меня есть сторожевая собака для приложения, что перезапускает программу снова, и все продолжает работать просто отлично).
Любые идеи будут полезны.Спасибо.
РЕДАКТИРОВАТЬ
void LogFile::PerformPeriodicalFlush( const utils::dt::TimeStamp& tsNow )
throw( LibCException )
{
m_tsLastPeriodicalCheck = tsNow;
struct stat LogFileStat;
int nResult = stat( m_sCurrentFullFileName.c_str(), &LogFileStat );
if ( 0 == nResult && S_ISREG( LogFileStat.st_mode ) )
{
//we successfuly stated the file, so it exists. We can safely perform
//a flush.
try
{
Flush();
return;
}
catch ( LibCException& )
{
OpenLogFile( tsNow );
return;
}
}
else
{
OpenLogFile( tsNow );
}
}
void RotatingLogFile::Flush() throw( object::LibCException )
{
if ( m_pFile != NULL )
{
if ( fflush( m_pFile ) (less_than) 0 )
{
throw object::LibCException();
}
}
}
** ПРИМЕЧАНИЕ ** не может вставить весь код, это часть более 10 тысяч кодов.Кроме того, это работает в течение многих лет в различных приложениях, в системах реального времени.Такие сбои очень, очень редки - вроде два раза в год.Итак, я не думаю, что это проблема в коде.Я знаю, что никто не может мне помочь с такими вещами, поэтому я просто спрашиваю какие-либо идеи, почему fflush может вызвать ошибку seg.