Возникла удивительная проблема: в одном из тредов работающей программы вдруг, совершенно на ровном месте, меняется EIP на мусор.
Ситуация такая: запускается служебный тред, основной тред его ждёт на событии (мутекс), при этом ничего больше не делается. Тот, запущенный, начинает свою деятельность - просто обсчёт данных, при этом даже вызовов процедур не происходит. Изредка (!) - то есть от запуска к запуску - внезапно в нём происходит SIGSEGV. Дамп показывает, что всегда, при каждом развале, у этого развалившегося треда один и тот же стек, одни и те же регистры. В EIP находится мусор - число 0x9C.
Удивительно то, что на этот тред извне ничто не влияет, его не приостанавливают, ptrace не делают, и никаких setjmp/longjmp в нём не делается. При этом того числа - 0x9C в его стеке НЕТ, то есть переход в неизвестно куда по инструкции ret исключается, т.е. стек не едет.
Такое впечатление, что системный шедулер неправильно восстанавливает контекст треда. Но почему всегда в один и тот же момент, в одном и том же месте?!!
Кто-нибудь сталкивался с такой мистикой? Поможите... :_(
Система:
> uname -a
Linux z-suse92 2.6.8-24-default #1 Wed Oct 6 09:16:23 UTC 2004 i686 athlon i386 GNU/Linux
> cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 10
model name : AMD Athlon(tm) XP 2500+
stepping : 0
cpu MHz : 1826.970
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse pni syscall mmxext 3dnowext 3dnow
bogomips : 3612.67
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от jek_
Ответ на:
комментарий
от jek_
Ответ на:
комментарий
от jek_
Ответ на:
комментарий
от jek_
Ответ на:
комментарий
от slav
Ответ на:
комментарий
от jek_
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.